springmvc Controller方法沒有加@ResponseBody導(dǎo)致api訪問404問題
springmvc Controller方法沒有加@ResponseBody導(dǎo)致api訪問404
使用的 spring boot是2.4.5版本, 對應(yīng)的是spring 5
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath/> <!-- lookup parent from repository --> </parent>
spring mvc 版本是: spring-webmvc:5.3.6
看代碼:
@Controller public class HomeController { private ApplicationContext applicationContext = null; @RequestMapping("/go") @ResponseBody public String go(){ return "go"; } @RequestMapping("/ok") public String ok(){ return "success"; } }
controller使用的是 @Controller注解
/go 請求上加了 @ResponseBody注解, /ok請求上沒有加@ResponseBody注解 ,導(dǎo)致
/go 請求訪問正常, /ok訪問出現(xiàn) 頁面 404的報錯。
為啥Controller 方法上加了 @ResponseBody注解,和不加區(qū)別這么大呢 ?
先說解決辦法
大家可能比較關(guān)心解決辦法:兩種解決辦法
1.@Controller替換成@RestController注解
@RestController public class HomeController { }
2.Controller中的方法上加上@ResponseBody注解
@RequestMapping("/go") @ResponseBody public String go(){ return "go"; }
1. @RestController 注解 包括了 @Controller 和@ResponseBody 兩個注解。
問題原因
使用@Controller注解,如果你的方法上沒有使用 @ResponseBody注解,會導(dǎo)致spring mvc框架認為你這個方法的返回值就是 ModelAndViewer對象,相當(dāng)于是一個 待跳轉(zhuǎn)的頁面,導(dǎo)致跳轉(zhuǎn)的時候找不到這個 viewer ,導(dǎo)致404報錯。
例如上面的Controller方法, return "go", 會去配置的目錄下找 go頁面,可能是Jsp,或者 Freemarker,或者 Velocity,或者Thymeleaf (https://www.thymeleaf.org/官網(wǎng))
我們可以在服務(wù)中加入這兩個配置,以便后臺日志看到404報錯的原因:
application.properties 文件中添加下面的2行配置:
spring.mvc.throw-exception-if-no-handler-found=true spring.web.resources.add-mappings=false
DispatcherServlet類中 源碼有如下屬性, throwExceptionIfNoHandlerFound 這個屬性默認值是false,看看源碼的注釋大概能理解他的含義。
到此,估計你也明白了,為啥Controller方法上不加 @ResponseBody注解會導(dǎo)致 訪問出現(xiàn) 404報錯吧 。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot整合redis實現(xiàn)輸入密碼錯誤限制登錄功能
遇到這樣的需求需要實現(xiàn)一個登錄功能,并且2分鐘之內(nèi)只能輸入5次錯誤密碼,若輸入五次之后還沒有輸入正確密碼,系統(tǒng)將會將該賬號鎖定1小時,這篇文章主要介紹了SpringBoot整合redis并實現(xiàn)輸入密碼錯誤限制登錄功能,需要的朋友可以參考下2024-02-02淺談Java中實現(xiàn)深拷貝的兩種方式—clone() & Serialized
這篇文章主要介紹了Java中實現(xiàn)深拷貝的兩種方式—clone() & Serialized,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Java開發(fā)中POJO和JSON互轉(zhuǎn)時如何忽略隱藏字段的問題
這篇文章主要介紹了Java開發(fā)中POJO和JSON互轉(zhuǎn)時如何忽略隱藏字段的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02