
前言在 SpringBoot 前后端分离项目开发中,分散式 try-catch 会造成大量冗余代码、错误返回格式混乱、异常日志零散难排查。借助 Spring 提供的@RestControllerAdvice+@ExceptionHandler实现全局统一异常捕获,是企业项目标准开发规范,可统一接口返回格式、集中日志采集、优化前端错误提示、简化异常运维排查。一、全局统一异常的四大核心价值统一接口返回格式:无论系统异常、参数错误、业务报错,前端接收固定 JSON 结构,不用多端适配不同错误报文。消除冗余代码:Controller/Service 层不再重复编写 try-catch,业务代码聚焦业务逻辑。规范化日志:统一异常落地日志,区分业务异常、系统异常日志级别,方便日志检索与异常监控告警。优化用户体验:屏蔽后端原生堆栈报错,前端展示友好文案,规避敏感报错信息外泄。二、核心注解详解1.@RestControllerAdvice组合注解 =@ControllerAdvice+@ResponseBody,全局拦截所有@RestController标注的接口,捕获接口执行抛出的异常并统一处理;可通过basePackages限定扫描包范围,精准管控模块。@ControllerAdvice:仅拦截,返回视图;前后端分离项目优先使用@RestControllerAdvice。2.@ExceptionHandler绑定指定异常类型,注解方法仅捕获对应异常,精准分级处理:先细粒度捕获自定义业务异常、参数异常,最后用Exception.class兜底捕获所有未知系统异常,遵循「精准优先、兜底在后」匹配规则。3.@ResponseStatus自定义接口 HTTP 响应状态码(400 参数错误 / 401 未登录 / 403 无权限 / 500 系统异常),配合异常处理实现标准 HTTP 语义。三、完整落地四步实现(生产标准代码)步骤 1:定义全局统一返回实体(Result)全项目接口成功 / 失败统一返回 JSON 结构,前后端约定字段:code(自定义业务码)、msg(提示信息)、data(业务数据)importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublicclassResultT{privateIntegercode;privateStringmsg;privateTdata;// 成功返回(带数据)publicstaticTResultTsuccess(Tdata){returnnewResult(200,"操作成功",data);}// 自定义错误码+信息publicstaticTResultTfail(Integercode,Stringmsg){returnnewResult(code,msg,null);}// 系统默认500错误publicstaticTResultTsystemErr(Stringmsg){returnnewResult