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报错吧 。

总结

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

相关文章

  • Java 通过反射给实体类赋值操作

    Java 通过反射给实体类赋值操作

    这篇文章主要介绍了Java 通过反射给实体类赋值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • JavaWeb中Servlet的深入讲解

    JavaWeb中Servlet的深入讲解

    这篇文章主要介绍了JavaWeb中Servlet的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java中的循环笔记整理(必看篇)

    Java中的循环笔记整理(必看篇)

    下面小编就为大家带来一篇Java中的循环笔记整理(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 使用Java编写一个好用的解析配置工具类

    使用Java编写一个好用的解析配置工具类

    这篇文章主要为大家详细介绍了如何使用Java编写一个好用的解析配置工具类,支持解析格式有properties,yaml和yml,感兴趣的可以了解下
    2024-11-11
  • SpringBoot整合redis实现输入密码错误限制登录功能

    SpringBoot整合redis实现输入密码错误限制登录功能

    遇到这样的需求需要实现一个登录功能,并且2分钟之内只能输入5次错误密码,若输入五次之后还没有输入正确密码,系统将会将该账号锁定1小时,这篇文章主要介绍了SpringBoot整合redis并实现输入密码错误限制登录功能,需要的朋友可以参考下
    2024-02-02
  • Spring IOC与DI核心重点分析

    Spring IOC与DI核心重点分析

    IOC也是Spring的核心之一了,之前学的时候是采用xml配置文件的方式去实现的,后来其中也多少穿插了几个注解,但是没有说完全采用注解实现。那么这篇文章就和大家分享一下,全部采用注解来实现IOC + DI
    2022-10-10
  • 浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    这篇文章主要介绍了Java中实现深拷贝的两种方式—clone() & Serialized,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java开发中POJO和JSON互转时如何忽略隐藏字段的问题

    Java开发中POJO和JSON互转时如何忽略隐藏字段的问题

    这篇文章主要介绍了Java开发中POJO和JSON互转时如何忽略隐藏字段的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java_Spring之XML 的 AOP 配置

    Java_Spring之XML 的 AOP 配置

    这篇文章主要介绍了Java_Spring中基于XML的AOP配置,上篇讲到的是基于注解的AOP配置,对XML感兴趣的同学可以参考阅读本文
    2023-04-04
  • Java中的base64编码器

    Java中的base64编码器

    这篇文章介绍了Java中的base64编码器,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04

最新评论