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框架認(rèn)為你這個方法的返回值就是 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 這個屬性默認(rèn)值是false,看看源碼的注釋大概能理解他的含義。
到此,估計你也明白了,為啥Controller方法上不加 @ResponseBody注解會導(dǎo)致 訪問出現(xiàn) 404報錯吧 。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot項目網(wǎng)頁加載出現(xiàn)Whitelabel?Error?Page的解決
這篇文章主要介紹了SpringBoot項目網(wǎng)頁加載出現(xiàn)Whitelabel?Error?Page的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
如何讓Jackson JSON生成的數(shù)據(jù)包含的中文以unicode方式編碼
這篇文章主要介紹了如何讓Jackson JSON生成的數(shù)據(jù)包含的中文以unicode方式編碼。需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12

