全局异常处理器

全局异常处理器

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

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

相关推荐
王者之座8 分钟前
java+maven配置yguard的一次实验
java·spring boot·maven
韩立学长1 小时前
基于Springboot的研学旅游服务系统5u416w14(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
百***61871 小时前
springboot整合mybatis-plus(保姆教学) 及搭建项目
spring boot·后端·mybatis
q***61501 小时前
eclipse配置Spring
java·spring·eclipse
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 106: 两个字符串的最小ASCII删除和
java·数据结构·算法·leetcode·深度优先
q***58192 小时前
Spring全家桶简介
java·后端·spring
武昌库里写JAVA2 小时前
微擎服务器配置要求,微擎云主机多少钱一年?
java·vue.js·spring boot·后端·sql
IUGEI2 小时前
深入解析HTTP长连接原理
java·网络·后端·网络协议·tcp/ip·http·https
q***64972 小时前
头歌答案--爬虫实战
java·前端·爬虫