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);
        //省略其他代码
      }

请求

运行结果:

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

问题排查和定位

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

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

解决

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

再次请求:

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

其他场景

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

统一返回结果:

抛出异常地方

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

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



大功告成!!

相关文章
|
2月前
|
JSON 前端开发 Java
解决Spring MVC中No converter found for return value of type异常
在Spring MVC开发中遇到`No converter found for return value of type`异常,通常是因缺少消息转换器、返回值类型不支持或转换器优先级配置错误。解决方案包括:1) 添加对应的消息转换器,如`MappingJackson2HttpMessageConverter`;2) 自定义消息转换器并实现`HttpMessageConverter`接口,设置优先级;3) 修改返回值类型为如`ResponseEntity`的合适类型。通过这些方法可确保返回值正确转换为响应内容。
133 1
|
2月前
|
Java Spring 容器
解决Spring的UnsatisfiedDependencyException异常的方法
在Spring开发中,UnsatisfiedDependencyException异常意味着依赖注入失败,影响应用稳定性。该异常由Spring容器在无法满足bean依赖时抛出,常见原因包括bean定义错误、循环依赖、多个候选bean等。解决方法包括:检查bean定义和注入的正确性、解决循环依赖、确认依赖包的兼容性、使用@Qualifier或@Primary注解。通过日志、调试工具和异常对比来定位问题。持续学习Spring框架有助于更好地解决此类异常。
1556 1
|
9天前
|
Java 数据库 索引
【Java】已解决Spring框架中的org.springframework.dao.DuplicateKeyException异常
【Java】已解决Spring框架中的org.springframework.dao.DuplicateKeyException异常
14 0
|
11天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的高质量升学分析系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的高质量升学分析系统的详细设计和实现(源码+lw+部署文档+讲解等)
11 0
|
12天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
7 0
|
12天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的高校成绩分析附带文章源码部署视频讲解等
11 0
|
12天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的学生成绩分析和弱项辅助系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的学生成绩分析和弱项辅助系统附带文章源码部署视频讲解等
14 0
|
1月前
|
Java
springboot之异常
springboot之异常
17 1
|
1月前
|
前端开发 Java 程序员
SpringBoot统一功能处理,拦截器,统一数据格式,捕捉异常
SpringBoot统一功能处理,拦截器,统一数据格式,捕捉异常
|
19天前
|
Java
SpringBoot起步依赖原理分析
SpringBoot起步依赖原理分析