全局异常处理器

全局异常处理器

在项目中我们往往不能全面的捕获抛出的异常,这就使得异常最终会上抛至框架,框架底层就会返回一个封装着错误信息的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...")

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

相关推荐
gb42152873 小时前
Spring Boot 2.5集成Elasticsearch(亲测)
spring boot·elasticsearch·jenkins
reasonsummer3 小时前
【办公类-116-01】20250929家长会PPT(Python快速批量制作16:9PPT相册,带文件名,照片横版和竖版)
java·数据库·python·powerpoint
ss2734 小时前
手写MyBatis第89弹:动态SQL解析与执行时机深度剖析
java·服务器·windows
Light604 小时前
LinkedList 头尾插入与随机访问的隐蔽陷阱—— 领码课堂|Java 集合踩坑指南(6):
java·开发语言·性能优化·deque·双向链表·linkedlist·fail-fast
心之伊始5 小时前
深入理解 AbstractQueuedSynchronizer(AQS):构建高性能同步器的基石
java·开发语言
静渊谋5 小时前
攻防世界-Check
java·安全·网络安全
代码充电宝6 小时前
LeetCode 算法题【简单】49. 字母异位词分组
java·算法·leetcode·面试·哈希算法
摸鱼的老谭6 小时前
Java学习之旅第一季-28:Java基础语法测试题
java·java基础测试
ruleslol6 小时前
SpringBoot12-JSON Web Token(JWT)
spring boot