springmvc Controller方法没有加@ResponseBody导致api访问404问题

 更新时间:2024年01月23日 16:27:33   作者:_晓夏_  
这篇文章主要介绍了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报错吧 。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring之@Qualifier注解的具体使用

    Spring之@Qualifier注解的具体使用

    本文主要介绍了Spring之@Qualifier注解的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • MyBatis多对多一对多关系查询嵌套处理

    MyBatis多对多一对多关系查询嵌套处理

    这篇文章主要为大家介绍了MyBatis多对多一对多关系查询嵌套处理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • SpringBoot项目网页加载出现Whitelabel Error Page的解决

    SpringBoot项目网页加载出现Whitelabel Error Page的解决

    这篇文章主要介绍了SpringBoot项目网页加载出现Whitelabel Error Page的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 如何让Jackson JSON生成的数据包含的中文以unicode方式编码

    如何让Jackson JSON生成的数据包含的中文以unicode方式编码

    这篇文章主要介绍了如何让Jackson JSON生成的数据包含的中文以unicode方式编码。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • IDEA+Maven打JAR包的两种方法步骤详解

    IDEA+Maven打JAR包的两种方法步骤详解

    Idea中为一般的非Web项目打Jar包是有自己的方法的,下面这篇文章主要给大家介绍了关于IDEA+Maven打JAR包的两种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • Java IO流之字符流的使用详解

    Java IO流之字符流的使用详解

    这篇文章主要围绕Java中的字符流进行介绍,包括字符输入流、字符输出流以及处理流异常的几种方式。文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-08-08
  • 基于Java回顾之反射的使用分析

    基于Java回顾之反射的使用分析

    本篇文章是对Java反射的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Java世界中最快的JDBC连接池HikariCP详解

    Java世界中最快的JDBC连接池HikariCP详解

    在 Java 生态系统中,JDBC 连接池的选择直接影响着系统的性能和稳定性,HikariCP 是目前公认的性能最强、代码最简洁的 JDBC 连接池实现,其设计哲学以“极简主义”为核心,本文将详细给大家介绍了Java世界中最快的JDBC连接池HikariCP,需要的朋友可以参考下
    2025-06-06
  • Mac安装maven并配置镜像源和全局变量

    Mac安装maven并配置镜像源和全局变量

    文章指导如何配置Maven环境变量,需修改exportMAVEN_HOME路径为实际路径(如通过brew命令获取),并添加阿里云镜像以验证安装
    2025-09-09
  • Maven插件docker-maven-plugin的使用

    Maven插件docker-maven-plugin的使用

    在我们持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,docker-maven-plugin 插件就是为了帮助我们在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。感兴趣的可以了解一下
    2021-06-06

最新评论