1. 简介

1.1 为什么要使用全局异常处理

为什么要全局处理异常?在 SpringBoot 日常开发中,经常会遇到 IOException,会写大量的 try…catch…finally 语句,造成程序视觉的污染。

1.2 自定义全局异常处理

上面的代码重点有三个注解,我们一一说明:

  • @RestControllerAdvice@RestController 注解的增强,作用是给 controller 控制器添加统一的操作或处理,具体表现为全局异常处理、全局异常绑定、全局异常预处理
  • @ExceptionHandler:用在方法上,统一处理某一类的异常。括号里写的是异常的级别,可以处理 Exception 级别及其以下所有的异常。
  • @ResponseStatus:指定客户端收到的 http状态码。

    引用:@RestControllerAdvice 是组件注解,他使得其实现类能够被 classpath 扫描自动发现,如果应用是通过 MVC 命令空间或 MVC Java 编程方式配置,那么该特性默认是自动开启的。主要配合 @ExceptionHandler 使用,统一处理异常情况。

  1. @Slf4j
  2. @RestControllerAdvice
  3. public class GlobalExceptionHandler {
  4. @ExceptionHandler(Exception.class)
  5. @ResponseStatus(org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR)
  6. public AjaxResult exception(Exception e) {
  7. log.error("全局异常信息 ex={}", e.getMessage(), e);
  8. return AjaxResult.error(HttpStatus.ERROR, e.getMessage());
  9. }
  10. }

这里说明下,全局异常处理确实省事,但是在项目出现无法的时候很难定位到某一个异常上,所以一般用局部异常处理。