SpringBoot全局异常不生效分析与解决

简介: SpringBoot全局异常不生效分析与解决

问题发生场景


自定义了个全局异常拦截:


@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    // private static final Logger logger = LoggerFactory.getLogger(ExceptionControllerAdvice.class);
    @Autowired
    private HttpServletRequest req;
    private Result failure(ServiceException exception) {
        return Result.buildFailure(req.getHeader(CommonConstant.X_REQUEST_ID), exception.getCode(), exception.getMessage(), req.getHeader(CommonConstant.X_TOKEN_ISSUER));
    }
    //手动抛出的业务异常
    @ExceptionHandler(ServiceException.class)
    public Result serviceExceptionHandler(ServiceException e) {
        return failure(e);
    }
  //省略其他异常
}


参数校验


@Data
@TableName("export_task_torque")
public class ExportTaskTorque extends BaseEntity {
  /**
  * 任务id
  */
  @TableId
  @NotBlank(message = "任务id不能为空", groups = {UpdateGroup.class})
  private String taskId;
  /**
  * 任务名称
  */
  @NotBlank(message = "任务名称不能为空", groups = {AddGroup.class})
  private String taskName;
  /**
  * 开始时间
  */
  @NotBlank(message = "开始时间不能为空", groups = {AddGroup.class})
  private String startTime;
  /**
  * 结束时间
  */
  @NotBlank(message = "结束时间不能为空", groups = {AddGroup.class})
  private String endTime;
  /**
  }


service层校验


 

public String add(ExportTaskTorque exportTaskTorque) {
         //hibernate-validtor校验入参
        ValidatorUtils.validateEntity(exportTaskTorque, AddGroup.class);
        //省略其他代码
      }


请求


1dc618a0ed9580ce8bfa6facb208c08f.png


运行结果:

5d4c6812c8535adbb050f4ddf2e1bce8.png


没有显示我的业务异常:,讲道理应该有参数校验信息:

46a9d80a6e05e4e3b19d57a0ee70bcdf.png


问题排查和定位


发现这个是被一个全局出入参数打印的aop给处理了。

66ba272a0bfc97be54a5fa679e3d5482.png

88b9988b40447cb37c7e3c492d49867f.png


虽然这个方法写了throws Throwable,但是try catch了。异常没有被抛出。


解决


解决方法就是把上面的try catch 去掉,一定记得保留throws Throwable

1dc618a0ed9580ce8bfa6facb208c08f.png


再次请求:


5d4c6812c8535adbb050f4ddf2e1bce8.png

可以看到手动的参数校验异常显示了,问题解决!


其他场景


小编之前还遇到过一种不能抛出全局异常的情况, 经过排查,是一个同事,修改了统一结果返回的公司基础core包。


统一返回结果:


46a9d80a6e05e4e3b19d57a0ee70bcdf.png


抛出异常地方


66ba272a0bfc97be54a5fa679e3d5482.png

有这个构造方法,向外传递异常。


问题出在,一个哥们把这个构造方法重构了,(>_<) !!经过沟通,让同事修改后,问题解决。



相关文章
|
6月前
|
NoSQL Java Redis
SpringBoot原理分析 | Redis集成
SpringBoot原理分析 | Redis集成
63 0
|
1月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
447 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
1月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
180 2
|
4月前
|
Java Spring 容器
Spring Boot 启动源码解析结合Spring Bean生命周期分析
Spring Boot 启动源码解析结合Spring Bean生命周期分析
106 11
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的高质量升学分析系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的高质量升学分析系统的详细设计和实现(源码+lw+部署文档+讲解等)
34 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
22 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
37 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的学生成绩分析和弱项辅助系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的学生成绩分析和弱项辅助系统附带文章源码部署视频讲解等
40 0
|
6月前
|
监控 Java 应用服务中间件
SpringBoot3 快速入门及原理分析
SpringBoot3 快速入门及原理分析
|
5月前
|
Java
SpringBoot起步依赖原理分析
SpringBoot起步依赖原理分析