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包。

统一返回结果:

抛出异常地方

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

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



大功告成!!

相关文章
|
11天前
|
Dubbo Java 应用服务中间件
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
26 1
|
1月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
410 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
1月前
|
Java API Spring
springBoot:注解&封装类&异常类&登录实现类 (八)
本文介绍了Spring Boot项目中的一些关键代码片段,包括使用`@PathVariable`绑定路径参数、创建封装类Result和异常处理类GlobalException、定义常量接口Constants、自定义异常ServiceException以及实现用户登录功能。通过这些代码,展示了如何构建RESTful API,处理请求参数,统一返回结果格式,以及全局异常处理等核心功能。
|
1月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
168 2
|
1月前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
180 10
|
1月前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
|
3月前
|
前端开发 小程序 Java
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
本文详细介绍了如何在SpringBoot项目中统一处理接口返回结果及全局异常。首先,通过封装`ResponseResult`类,实现了接口返回结果的规范化,包括状态码、状态信息、返回信息和数据等字段,提供了多种成功和失败的返回方法。其次,利用`@RestControllerAdvice`和`@ExceptionHandler`注解配置全局异常处理,捕获并友好地处理各种异常信息。
1130 0
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
|
4月前
|
Java Spring 容器
Spring Boot 启动源码解析结合Spring Bean生命周期分析
Spring Boot 启动源码解析结合Spring Bean生命周期分析
103 11
|
3月前
|
消息中间件 Java 开发工具
【Azure 事件中心】Spring Cloud Stream Event Hubs Binder 发送Event Hub消息遇见 Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially 异常
【Azure 事件中心】Spring Cloud Stream Event Hubs Binder 发送Event Hub消息遇见 Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially 异常
|
3月前
|
Java Spring
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息