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

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


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



相关文章
|
2月前
|
NoSQL Java Redis
SpringBoot原理分析 | Redis集成
SpringBoot原理分析 | Redis集成
48 0
|
2天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的高质量升学分析系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的高质量升学分析系统的详细设计和实现(源码+lw+部署文档+讲解等)
5 0
|
3天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
5 0
|
3天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
5 0
|
3天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的学生成绩分析和弱项辅助系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的学生成绩分析和弱项辅助系统附带文章源码部署视频讲解等
11 0
|
10天前
|
Java
SpringBoot起步依赖原理分析
SpringBoot起步依赖原理分析
|
11天前
|
架构师 NoSQL Java
【原创】004 | 搭上SpringBoot事务诡异事件分析专车
【原创】004 | 搭上SpringBoot事务诡异事件分析专车
|
14天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的电商数据分析的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的电商数据分析的详细设计和实现(源码+lw+部署文档+讲解等)
11 0
|
2月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的自习室预订座位管理分析与实现的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的自习室预订座位管理分析与实现的详细设计和实现(源码+lw+部署文档+讲解等)
|
2月前
|
监控 Java 应用服务中间件
SpringBoot3 快速入门及原理分析
SpringBoot3 快速入门及原理分析