Spring Boot全局异常处理核心是三件事:统一响应结构(Result类含code/msg/data)、@RestControllerAdvice捕获所有异常、区分业务异常与系统错误;再通过自定义BusinessException和ResponseBodyAdvice增强,覆盖95%场景。

直接上手学,不用绕弯子。Spring Boot 全局异常处理核心就三件事:统一响应结构、捕获所有异常、区分业务和系统错误。掌握这三点,就能覆盖 95% 的实际场景。
定义统一响应体 Result 类
所有接口(无论成功或失败)都返回同一个格式,前端才好解析。关键字段是 code(状态码)、msg(提示语)、data(业务数据)。建议用 Lombok 简化代码:
- code 设为 int 类型,200 表示成功,400 起表示各类业务错误,500 表示服务端异常
- 提供静态方法
success(T data)和error(int code, String msg),避免每次 new 对象 - 不要在 Result 里塞堆栈、时间戳、请求 ID 等字段——这些该进日志,不该暴露给前端
用 @RestControllerAdvice 写全局处理器
这是真正的“一处配置,全局生效”机制。它不是拦截器,也不依赖 AOP 配置,Spring Boot 自动扫描并注入:
- 类加
@RestControllerAdvice注解,方法加@ExceptionHandler指定要捕获的异常类型 - 优先处理自定义异常(如
BusinessException),再捕获MethodArgumentNotValidException(参数校验失败)、NullPointerException等常见系统异常 - 每个
@ExceptionHandler方法只做三件事:打日志(含 traceId)、构造 Result 返回、设合适 HTTP 状态码(如 400、500)
补充两个实用增强点
光有基础处理还不够,真实项目常需要这两步升级:
-
自定义业务异常类:继承 RuntimeException,自带 code 和 msg 字段。抛出时直接
throw new BusinessException(404, "用户不存在"),全局处理器里一行就能提取信息返回 -
统一包装正常返回:用
@ControllerAdvice + ResponseBodyAdvice实现。这样 Controller 方法写return user;,框架自动转成Result.success(user),连 success() 都不用手动调了
不需要背注解原理,先照着模板跑通一个用户查询接口的 404 和 500 场景,再逐步加参数校验、数据库异常过滤。稳扎稳打比看十篇理论有用得多。


















