全局异常处理器

全局异常处理器

在项目中我们往往不能全面的捕获抛出的异常,这就使得异常最终会上抛至框架,框架底层就会返回一个封装着错误信息的JSON格式的数据,但这样的数据通常并不是我们想要的。

我们希望能够对上抛的异常实现统一处理,进而返回我们希望的错误信息,这时候就可以借助Spring中提供的全局异常处理器进行处理,并最终返回我们希望的错误信息。

快速入门

  • 定义一个类,在类上添加@ControllerAdvice标明这是一个控制器通知类,并加上@ResponseBody标明这个类方法的返回值会转换为json后再响应给前端。
  • 在控制器通知类中,需要定义一个方法来捕获异常,并在这个方法上添加@ExceptionHandler声明这是个异常处理方法,通过@ExceptionHandler注解中的value属性指定要捕获哪一类异常,当然也可以在方法形参中声明要捕获的异常类型。
java 复制代码
//@RestControllerAdvice == @ControllerAdvice + @ResponseBody
@RestControllerAdvice//声明这是个通知器控制类
@Slf4j
public class GlobalExceptionAdvice {

    @ExceptionHandler//声明这是个异常处理方法
    public Result exceptionHandler(Exception e) {
        //方法形参声明捕获异常类型,也可以在注解value属性中声明
        log.error("[服务器异常] : {}" ,e.getMessage());
        return Result.error("服务器异常,请稍后重试...");
    }

    
    @ExceptionHandler//声明这是个异常处理方法
    public Result exceptionHandler(ArithmeticException e) {
        //方法形参声明捕获异常类型,也可以在注解value属性中声明
        log.error("[服务器异常] : {}" ,e.getMessage());
        return Result.error("服务器出现算数异常,请稍后重试...");
    }
        
}

当我们向上抛出不同异常并不catch时,异常最终会到达全局异常处理器,控制台结果如下:

  • throw new RuntimeException("hello RuntimeException...")
  • throw new ArithmeticException("hello ArithmeticException...")

当有多个异常处理方法时,抛出的异常匹配异常处理方法的顺序为当前异常自上一次匹配,如果当前异常没有对应异常处理方法,就会向上去找其父类的异常处理方法。

相关推荐
骑着蜗牛撵大象3273 小时前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
独泪了无痕3 小时前
Hutool之LocalDateTimeUtil:让时间间隔操作如虎添翼
java
三无少女指南5 小时前
从这里开始:Java 后端与 AI 工程的三条阅读路线
java·学习路线·ai工程
香蕉大香蕉(06敬畏市场)5 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
nice_lcj5206 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
骑着蜗牛撵大象3276 小时前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp
tryxr6 小时前
JVM 垃圾回收机制
java·jvm·gc·垃圾回收
揣一尾游鱼yu7 小时前
Spring上(IOC)笔记
java·笔记·spring·ioc
荣码7 小时前
长上下文与大文档处理:200页PDF怎么喂给AI,我踩了4个坑
java·python
极限挑战哥8 小时前
共享电单车联营平台分账架构实践:二清合规与自动分账零人工方案
java·大数据·人工智能·微信小程序·架构·微信公众平台