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

统一返回结果:

抛出异常地方

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

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



大功告成!!

相关文章
|
3月前
|
安全 NoSQL Java
SpringBoot接口安全:限流、重放攻击、签名机制分析
本文介绍如何在Spring Boot中实现API安全机制,涵盖签名验证、防重放攻击和限流三大核心。通过自定义注解与拦截器,结合Redis,构建轻量级、可扩展的安全防护方案,适用于B2B接口与系统集成。
568 3
|
4月前
|
JavaScript Java 应用服务中间件
基于springboot的学生成绩分析和弱项辅助系统
本系统旨在解决学生成绩分析与弱项辅助信息管理效率低下的问题,通过软件技术实现数据处理的高效化、流程化与规范化,提升管理质量与便捷性。
|
5月前
|
XML 人工智能 IDE
Springboot整合SSMP报错分析
本文介绍了Springboot整合SSMP框架时常见的报错及解决方案,包括MyBatis-Plus版本不兼容导致的Lambda表达式条件构造器报错及表名不匹配问题。通过升级或降级MyBatis-Plus版本、使用@TableName注解或配置table-prefix属性,可有效解决上述问题,帮助开发者避免在整合SSMP时出现不必要的错误。
290 0
|
9月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
本文介绍了在Spring Boot项目中如何通过创建`GlobalExceptionHandler`类来全局处理系统异常。通过使用`@ControllerAdvice`注解,可以拦截项目中的各种异常,并结合`@ExceptionHandler`注解针对特定异常(如参数缺失、空指针等)进行定制化处理。文中详细展示了处理参数缺失异常和空指针异常的示例代码,并说明了通过拦截`Exception`父类实现统一异常处理的方法。虽然拦截`Exception`可一劳永逸,但为便于问题排查,建议优先处理常见异常,最后再兜底处理未知异常,确保返回给调用方的信息友好且明确。
1223 0
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
|
8月前
|
SQL 前端开发 Java
深入分析 Spring Boot 项目开发中的常见问题与解决方案
本文深入分析了Spring Boot项目开发中的常见问题与解决方案,涵盖视图路径冲突(Circular View Path)、ECharts图表数据异常及SQL唯一约束冲突等典型场景。通过实际案例剖析问题成因,并提供具体解决方法,如优化视图解析器配置、改进数据查询逻辑以及合理使用外键约束。同时复习了Spring MVC视图解析原理与数据库完整性知识,强调细节处理和数据验证的重要性,为开发者提供实用参考。
352 0
|
9月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常
本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。
428 0
|
12月前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
11月前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
284 5
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
3285 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
Dubbo Java 应用服务中间件
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
479 1

热门文章

最新文章