ControllerAdvice + ExceptionHandler + ResponseBody全局异常处理
背景
传统的spring web项目中,业务逻辑里发生异常时往往需要一个一个的进行处理,业务方法多了那对应的处理代码就会变得臃肿和重复,所以需要一个全局的统一异常处理,解耦业务代码,返回给前端友好的提示信息。本文就以SpringBoot项目为例介绍如何对项目中的异常进行统一处理。
新建springboot项目,引入相关依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
本文为演示所用,只引入了web依赖
创建自定义业务异常类

自定义全局异常处理

上图代码中共使用了 @ControllerAdvice @ExceptionHandler @ResponseBody 三个注解
@ControllerAdvice是spring 3.2版本中新增的注解,从名字的定义可以理解为控制增强。用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,使这些配置适用于所有使用@RequestMapping的方法。 除了@ControllerAdvice还有@RestControllerAdvice他们的区别和@Controller与@RestController是一个道理@ExceptionHandler拦截处理某些异常(一个或多个,不加参数默认拦截所有异常),从而能够减少代码重复率和复杂度@ResponseBody将返回的对象结果转换为json格式,如果使用@RestControllerAdvice的话无需使用
注 本文由于演示的原因没有在具体的处理逻辑中增加日志打印,如果在项目中一定要记得打印相关错误日志
编写测试controller

方法中我们手动抛出了自定义的异常,这时候访问对应的地址结果如下所示

至此一个简易的全局异常处理器就完成了