基于spring 的统一异常处理
将业务执行过程中会产生的各种异常,对其进行统一处理是所有web项目的通用需求,spring 作为最流行的web框架,自然是提供了解决方案。
spring 的统一异常处理
在Spring 3.2中,新增了@ControllerAdvice、@RestControllerAdvice 注解来增强我们 controller 层的。
在标注了 @ControllerAdvice、@RestControllerAdvice 注解的类中,配合使用以下注解可以实现不同的功能
@ExceptionHandler : 全局异常处理
@InitBinder : 全局数据绑定
@ModelAttribute : 全局数据预处理
对于全局异常处理,具体来说就是,通过创建 @ControllerAdvice 类,并自定义一个 @ExceptionHandler 方法,来统一处理。
实例
这里提供一种常见的设计,供大家参考。
主要分为以下几个部分
自定义全局状态码
自定义异常类
自定义业务结果类
自定义统一异常处理类
使用自定义的异常
自定义全局状态码
每一个业务状态都对于一个状态码
自定义异常类
每一种异常都对于一种ApplicationEnum
自定义业务结果类
自定义业务结果类,来统一所有 controller 层的返回值
为了方便使用,再创建一个 SuccessResult 和一个 FailResult
自定义异常处理类
如果一个异常能匹配多个 @ExceptionHandler 时,选择匹配深度最小的Exception(即最匹配的Exception)
参考文章
使用自定义的异常