什么是全局异常处理器?
在 Java 中,特别是在 Spring Framework 中,全局异常处理器是一种用于集中处理应用程序中发生的异常的机制。这种处理器可以帮助你管理和处理应用程序中的异常,从而提供统一的错误处理逻辑和用户友好的错误响应。
举个例子:
如果项目是那种javaweb项目,大部分离不开,分层结构(Controller、Service、Mapper),
那如果业务操作数据库出错之后,一般持久层拿到错误,就会往Service层抛,然后就会抛到
Controller层,继续往上抛,异常给框架拿到,它就会返回一个异常格式给前端,因为没有异常处
理,前端拿到这个异常的JSON格式,还是会出现500异常,就是这个JSON格式的信息,它没
解析成功。
解决方案:
-
方案一:在所有Controller的所有方法中进行try…catch处理
-
缺点:代码臃肿(不推荐)
-
-
方案二:全局异常处理器
-
好处:简单、优雅(推荐)
-
全局异常处理器的实现?
我们该怎么样定义全局异常处理器?
-
定义全局异常处理器非常简单,就是定义一个类,在类上加上一个注解@RestControllerAdvice,加上这个注解就代表我们定义了一个全局异常处理器。
-
在全局异常处理器当中,需要定义一个方法来捕获异常,在这个方法上需要加上注解@ExceptionHandler。通过@ExceptionHandler注解当中的value属性来指定我们要捕获的是哪一类型的异常。
@RestControllerAdvice = @ControllerAdvice + @ResponseBody
处理异常的方法返回值会转换为json后再响应给前端
@RestControllerAdvice
public class GlobalExceptionHandler {
//处理异常
@ExceptionHandler(Exception.class) //指定能够处理的异常类型
public Result ex(Exception e){
e.printStackTrace();//打印堆栈中的异常信息
//捕获到异常之后,响应一个标准的Result
return Result.error("对不起,操作失败,请联系管理员");
}
}
全局异常处理器捕获到异常就会返回Result对象错误信息,里面封装成JSON格式之后,会被可以
被前端解析,并且前端会给出友好的回应,这说明前端可以解析该JSON数据。
以上就是全局异常处理器的使用,主要涉及到两个注解:
-
@RestControllerAdvice //表示当前类为全局异常处理器
-
@ExceptionHandler //指定可以捕获哪种类型的异常进行处理