springmvc Controller方法没有加@ResponseBody导致api访问404问题
springmvc Controller方法没有加@ResponseBody导致api访问404
使用的 spring boot是2.4.5版本, 对应的是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注解 ,导致
/go 请求访问正常, /ok访问出现 页面 404的报错。
为啥Controller 方法上加了 @ResponseBody注解,和不加区别这么大呢 ?
先说解决办法
大家可能比较关心解决办法:两种解决办法
1.@Controller替换成@RestController注解
@RestController public class HomeController { }
2.Controller中的方法上加上@ResponseBody注解
@RequestMapping("/go") @ResponseBody public String go(){ return "go"; }
1. @RestController 注解 包括了 @Controller 和@ResponseBody 两个注解。
问题原因
使用@Controller注解,如果你的方法上没有使用 @ResponseBody注解,会导致spring mvc框架认为你这个方法的返回值就是 ModelAndViewer对象,相当于是一个 待跳转的页面,导致跳转的时候找不到这个 viewer ,导致404报错。
例如上面的Controller方法, return "go", 会去配置的目录下找 go页面,可能是Jsp,或者 Freemarker,或者 Velocity,或者Thymeleaf (https://www.thymeleaf.org/官网)
我们可以在服务中加入这两个配置,以便后台日志看到404报错的原因:
application.properties 文件中添加下面的2行配置:
spring.mvc.throw-exception-if-no-handler-found=true spring.web.resources.add-mappings=false
DispatcherServlet类中 源码有如下属性, throwExceptionIfNoHandlerFound 这个属性默认值是false,看看源码的注释大概能理解他的含义。
到此,估计你也明白了,为啥Controller方法上不加 @ResponseBody注解会导致 访问出现 404报错吧 。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
IDEA与模拟器安装调试失败的处理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES
这篇文章主要介绍了IDEA与模拟器安装调试失败的处理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-09-09浅谈Spring Cloud zuul http请求转发原理
这篇文章主要介绍了浅谈Spring Cloud zuul http请求转发原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08SpringBoot中的static静态资源访问、参数配置、代码自定义访问规则详解
这篇文章主要介绍了SpringBoot的static静态资源访问、参数配置、代码自定义访问规则,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-07-07Java concurrency之锁_动力节点Java学院整理
这篇文章主要为大家详细介绍了Java concurrency之锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-06
最新评论