全局异常处理器

全局异常处理器

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

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

相关推荐
毕设源码-朱学姐38 分钟前
【开题答辩全过程】以 公务员考试在线测试系统为例,包含答辩的问题和答案
java
serendipity_hky42 分钟前
【SpringCloud | 第2篇】OpenFeign远程调用
java·后端·spring·spring cloud·openfeign
RwTo1 小时前
【源码】-Java线程池ThreadPool
java·开发语言
SadSunset1 小时前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
汝生淮南吾在北1 小时前
SpringBoot+Vue养老院管理系统
vue.js·spring boot·后端·毕业设计·毕设
兮动人1 小时前
EMT4J定制规则版:Java 8→17迁移兼容性检测与规则优化实战
java·开发语言·emt4j
一点★1 小时前
Java中的常量池和字符串常量池
java·开发语言
问君能有几多愁~1 小时前
C++ 日志实现
java·前端·c++
菜鸟plus+1 小时前
Java 接口的演变
java·开发语言
李慕婉学姐1 小时前
【开题答辩过程】以《基于springboot的地铁综合服务管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端