一、BaseException基础异常
-
设计定位
- 继承
RuntimeException
,作为业务异常的基类 - 通过枚举
BasicEnum
封装标准化错误码和消息
public BaseException(BasicEnum basicEnum) { this.basicEnum = basicEnum; // 强制初始化错误类型 }
- 继承
-
触发场景
- 业务逻辑中主动抛出(如参数校验失败、资源不存在等)
if (param == null) { throw new BaseException(BasicEnum.PARAM_ERROR); }
二、GlobalExceptionHandler全局处理器
四、关键匹配规则
-
核心机制
- 使用
@RestControllerAdvice
+@ExceptionHandler
捕获所有控制器层异常 - 优先级高于默认的Spring Boot错误处理
- 使用
-
执行流程
graph TD A[业务代码抛出BaseException] --> B[GlobalExceptionHandler拦截] B --> C{异常类型匹配?} C -->|BaseException| D[执行handleBaseException] C -->|其他异常| E[执行handleUnknownException] D --> F[记录日志并返回ResponseResult] E --> G[记录日志并返回500错误]
-
典型处理逻辑
三、核心执行顺序
-
BaseException的作用
- 作为自定义业务异常的基类(继承
RuntimeException
),用于封装业务错误码(如BasicEnum
) - 由业务代码主动抛出(如
throw new BaseException(BasicEnum.PARAM_ERROR)
)
- 作为自定义业务异常的基类(继承
-
GlobalExceptionHandler的作用
- 通过
@RestControllerAdvice
注解声明为全局异常处理器 - 通过
@ExceptionHandler
方法捕获并处理异常,返回统一响应格式
- 通过
-
实际执行流程
graph TD A[业务代码抛出BaseException] --> B{当前Controller是否有@ExceptionHandler?} B -->|是| C[优先执行Controller内匹配的异常处理] B -->|否| D[由GlobalExceptionHandler.handleBaseException处理]
-
精确优先原则
- 若存在
@ExceptionHandler(BaseException.class)
,则优先匹配该方法 - 若不存在,则向上匹配父类异常处理器(如
RuntimeException
或Exception
)
- 若存在
-
全局处理器的兜底作用
- 当Controller内部未处理异常时,
GlobalExceptionHandler
才会介入 - 通过
@Order
注解可调整多个全局处理器的优先级
- 当Controller内部未处理异常时,