GlobalExeptionHandler全局异常处理器核心知识点
1.@RestControllerAdvice
全局REST接口统一增强处理器,只拦截标有@RestController的控制器抛出的异常。等等价于@ControllerAdvice + @ResponseBody,返回值自动序列化为JSON,不用每个方法加@ResonseBody。默认扫描当前包及子包所有Controller,可通过basePackages指定扫描包。全局异常拦截的入口注解。
2.@ExceptionHandler(异常类.class)
声明当前方法专门捕获指定类型异常。精准匹配优先,子类异常方法会优先于父类执行。例:BusinessException 会先走自定义业务异常方法,不会走到RuntimeException/Exception兜底,一个类可多个该注解方法,分别处理不同异常。
3.@ResponseStatus(HttpStatus.状态码)
修改HTTP响应状态码,和业务返回码分离。
常用状态码:
- 400 BAD_REQUEST:参数错误、缺失参数、校验失败
- 401 UNAUTHORIZED:未登录、Token 失效
- 403 FORBIDDEN:登录但无权限 / 无角色
- 500 INTERNAL_SERVER_ERROR:系统未知异常、运行时异常
4.@Slf4j
lombok注解,自动注入log对象,用于日志打印,区分日志级别:
log.warn():业务可控异常(参数错、未登录、权限不足、不打印完整堆栈)
log.error(消息, e):系统未知异常,打印完整异常堆栈,方便线上排查
5.自定义业务异常 BusinessException
业务代码手动throw new BusinessException(码, 提示),业务规则不通过(数据不存在、库存不足、订单已关闭、操作他人数据)。读取自定义错误码 + 自定义消息,返回前端友好业务提示,仅打印warn日志
6.Sa-Token鉴权异常
框架自动抛出的权限异常,无需手动编码判断,适配项目鉴权体系:
NotLoginException(401):未登录、Token过期、Token非法、对应身份认证失败,前端统一跳转登录页。
NotPermissionException / NotRoleException(403):身份合法但权限/角色不匹配,属于访问越权,统一返回无权限提示。
7.统一处理前端参数不合法导致的异常,归属于客户端请求错误,后端无需修复代码:
MethodArgumentNotValidException:适配@RequestBody JSON参数检验,由@Valid注解触发。后台全量打印错误日志便于排查,前端仅返回第一条提示,兼顾排查效率与交互体验。
MissingServletRequestParameterException:适配@RequestParam必填参数缺失场景,精准提示缺失参数名称。
IllegalArgumentException:开发者手动校验参数后主动抛出,用于处理参数范围、格式、枚举非法等自定义参数校验场景。
8.RuntimeException运行时异常兜底(500)
捕获所有非受检运行时异常,均为后端代码BUG或系统异常:空指针、数组越界、数据库异常、第三方接口调用异常等。打印完整堆栈日志,方柏霓开发者定位BUG;对前端屏蔽底层报错细节,仅返回通用系统提示,防止服务器信息泄露,保障系统安全。
9.Exception全局最后的兜底
顶层父类异常,作为项目最后一道异常防护屏障。捕获所有前述处理器为匹配的受检异常、未知框架、罕见系统异常。杜绝接口裸报错、杜绝非预期异常导致的服务响应异常,保证项目所有接口100%返回标准化JSON结构,保证前端系统稳定性。

更多推荐

所有评论(0)