首页 > 其他分享 >springboot没加@ResponseBody注解导致的循环调用

springboot没加@ResponseBody注解导致的循环调用

时间:2025-01-05 23:22:31浏览次数:1  
标签:没加 resource springboot ResultBody searchByName 路径 ResponseBody products inventor

一、问题背景

为了自定义后端返回异常,在代码中使用了全局异常处理器如下:
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(value = BusinessException.class)
    public ResultBody BusineeExceptionHandle(BusinessException e, HttpServletRequest request){
        String path = request.getRequestURI();
        logger.error("发生业务异常!原因是:{},请求路径是:{}",e.getErrorMsg(),path);
        return ResultBody.error(e.getErrorCode(), e.getErrorMsg());
    }

    @ExceptionHandler(value = Exception.class)
    public ResultBody handleSystemException(Exception e, HttpServletRequest request){
        String path = request.getRequestURI();
        logger.error("发生系统异常!请求路径是:{},原因是:",path,e);
        return ResultBody.error(ResCode.RES_9999);
    }
}

Controller层有一个按照名称查找商品的接口:

@RestController
@RequestMapping("/inventory/products")
@Slf4j
public class ProductController {

    @Autowired
    ProductService productService;
    // 根据名称查找产品 @RequestParam表示需要在url路径中出现该参数 searchByName?name
    @GetMapping("/searchByName")
    public ResultBody getProductByName(@RequestParam String name) {
        return ResultBody.success(productService.getProductsByName(name));
    }

二、问题

按照商品名称查找,调用get方法,发送http://localhost:8080/inventory/products/searchByName?name=草莓的请求
数据库中没有草莓的数据,因此触发异常,但是日志开始循环调用路径

2025-01-05 23:10:42 [http-nio-8080-exec-4] ERROR c.e.c.GlobalExceptionHandler - 发生业务异常!原因是:查询商品表为空,请求路径是:/inventory/products/searchByName
2025-01-05 23:10:42 [http-nio-8080-exec-4] WARN  o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [com.example.util.BusinessException]
2025-01-05 23:10:44 [http-nio-8080-exec-4] ERROR c.e.c.GlobalExceptionHandler - 发生系统异常!请求路径是:/inventory/products/inventory/products/searchByName,原因是:
org.springframework.web.servlet.resource.NoResourceFoundException: No static resource inventory/products/inventory/products/searchByNa
2025-01-05 23:10:45 [http-nio-8080-exec-4] ERROR c.e.c.GlobalExceptionHandler - 发生系统异常!请求路径是:/inventory/products/inventory/products/inventory/products/inventory/products/searchByName,原因是:
org.springframework.web.servlet.resource.NoResourceFoundException: No static resource inventory/products/inventory/products/inventory/products/inventory/products/searchByName.
	at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)
···

可以看到刚开始报错没有问题,后面就开始报错NoResourceFoundException,说明请求的url路径不对。根据打出来的日志,发现后面的每次请求都是inventory/products/searchByName不断叠加/inventory/products

三、问题排查

排查了一下午(chat也没给我解决,是一个个试出来的),发现是没加@ResponseBody注解,如果不加这个注解,spring会将则返回值作为默认视图名去解析,返回值通常解析为跳转路径,控制器返回的时候路径会变为(在当前路径的上一级路径上追加路径),而这个视图是不存在的。
参考资料:https://cloud.tencent.com/developer/article/2090325

四、问题解决

加@ResponseBody注解或者将@ControllerAdive改成@RestControllerAdvice

五、反思

  • 对SpringMVC不够了解
  • 对@ResponseBody有了进一步理解

标签:没加,resource,springboot,ResultBody,searchByName,路径,ResponseBody,products,inventor
From: https://www.cnblogs.com/pengu1998/p/18654140

相关文章

  • 基于java的SpringBoot/SSM+Vue+uniapp的德云社票务系统的详细设计和实现(源码+lw+部署
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • SpringBoot进阶教程(八十四)spring-retry
    在日常的一些场景中,很多需要进行重试的操作.而spring-retry是spring提供的一个基于spring的重试框架,某些场景需要对一些异常情况下的方法进行重试就会用到spring-retry。spring-retry可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释......
  • 快速构建企业级Java应用的利器——SpringBoot脚手架
     GitHub: 项目地址_GitHub(推荐github访问)Gitee: 项目地址_国内访问你是否在开发企业级Java应用时,被繁琐的配置和集成所困扰?是否希望有一个功能齐全、开箱即用的框架来加速你的项目开发?一款集成了主流技术组件的企业级SpringBoot脚手架项目。这个项目已经在GitHub和Gitee上......
  • springboot儿童疫苗预约系统-计算机毕业设计源码58516
    摘  要随着人们对健康的重视和疫苗接种意识的提高,疫苗预约系统成为一种重要的健康管理工具。本研究旨在基于SpringBoot框架开发儿童疫苗预约系统,包括首页、网站公告、疫苗资讯和儿童疫苗预约模块,旨在为家长和监护人提供方便快捷的儿童疫苗预约服务,促进儿童健康管理和疫......
  • springboot一德餐厅点餐系统-毕业设计源码83801
    摘 要本文介绍了基于SpringBoot框架开发的一德餐厅点餐系统的设计与实现。随着餐饮行业的数字化转型,点餐系统的重要性日益凸显。该系统旨在提供顾客便捷的点餐体验,包括菜单浏览、下单支付等功能,提升餐厅服务效率和顾客满意度。通过充分利用SpringBoot框架的优势,点餐系......
  • springboot闲置物品交易系统-计算机毕业设计源码01364
    摘 要本项目是一个基于SpringBoot的闲置物品交易系统。该平台旨在为大学生提供一个便捷、高效的交易平台,使他们能够在校园内买卖闲置物品。通过该平台,学生们可以方便地找到自己需要的物品,同时也可以将自己不再使用的物品转让给其他有需求的同学。这样的"买卖同体"理念促......
  • 【开源】基于SpringBoot框架租房管理系统(计算机毕业设计)+万字毕业论文 T102
    系统合集跳转源码获取链接一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境:Eclipse,Myeclipse,IDEA或者SpringToolSuite都可以tomcat环境:Tomcat7.x,8.x,9.x版本均可操作系统环境:WindowsXP/7/8//8.1/10/11或者L......
  • 【开源】基于SpringBoot框架论坛网站(计算机毕业设计)+万字毕业论文 T094
    系统合集跳转源码获取链接一、系统环境运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。IDE环境:Eclipse,Myeclipse,IDEA或者SpringToolSuite都可以tomcat环境:Tomcat7.x,8.x,9.x版本均可操作系统环境:WindowsXP/7/8//8.1/10/11或者L......
  • SpringBoot项目启动报错java.lang.ArrayStoreException: sun.reflect.annotation.Type
    问题今天启动业余学习项目里的某服务A发现启动失败,报错信息如下:[ERROR][2025-01-0515:41:26,083][main]com.cdfive.springboot.startup.ApplicationStartupExceptionReporter[30]-error=>java.lang.ArrayStoreException:sun.reflect.annotation.TypeNotPresentExcepti......
  • springboot毕设 基于andriod的图书借阅系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,图书馆作为知识与智慧的汇聚地,其管理与服务模式正经历着从传统向数字化的深刻转变。随着智能手机和移动互联网技术的普及,人们......