1. 简介
1.1 为什么要使用全局异常处理
为什么要全局处理异常?在 SpringBoot 日常开发中,经常会遇到 IOException,会写大量的 try…catch…finally 语句,造成程序视觉的污染。
1.2 自定义全局异常处理
上面的代码重点有三个注解,我们一一说明:
@RestControllerAdvice
:@RestController
注解的增强,作用是给 controller 控制器添加统一的操作或处理,具体表现为全局异常处理、全局异常绑定、全局异常预处理。@ExceptionHandler
:用在方法上,统一处理某一类的异常。括号里写的是异常的级别,可以处理 Exception 级别及其以下所有的异常。@ResponseStatus
:指定客户端收到的 http状态码。引用:@RestControllerAdvice 是组件注解,他使得其实现类能够被 classpath 扫描自动发现,如果应用是通过 MVC 命令空间或 MVC Java 编程方式配置,那么该特性默认是自动开启的。主要配合 @ExceptionHandler 使用,统一处理异常情况。
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseStatus(org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR)
public AjaxResult exception(Exception e) {
log.error("全局异常信息 ex={}", e.getMessage(), e);
return AjaxResult.error(HttpStatus.ERROR, e.getMessage());
}
}
这里说明下,全局异常处理确实省事,但是在项目出现无法的时候很难定位到某一个异常上,所以一般用局部异常处理。