@RestControllerAdvice
@RestControllerAdvice 是 Spring Framework(3.2+)和 Spring Boot 中用于全局处理控制器层异常和统一响应格式的注解。它结合了 @ControllerAdvice 和 @ResponseBody 的功能,能够拦截控制器方法抛出的异常,并以 JSON/XML 格式返回处理结果。
核心作用
全局异常处理
捕获所有控制器(@RestController)抛出的异常,避免重复编写异常处理代码。
数据绑定与验证处理
统一处理参数校验(如 @Valid)失败时的错误响应。
数据预处理
通过 @InitBinder 或 @ModelAttribute 对请求参数进行全局处理。
基础用法示例
@RestControllerAdvice
public class GlobalExceptionHandler {// 处理特定异常@ExceptionHandler(IllegalArgumentException.class)public ResponseEntity<ErrorResponse> handleIllegalArgument(IllegalArgumentException ex) {ErrorResponse error = new ErrorResponse("参数错误", ex.getMessage());return ResponseEntity.badRequest().body(error);}// 处理所有未捕获的异常@ExceptionHandler(Exception.class)public ResponseEntity<ErrorResponse> handleGenericException(Exception ex) {ErrorResponse error = new ErrorResponse("服务器错误", ex.getMessage());return ResponseEntity.internalServerError().body(error);}
}
关键注解解析
注意事项
包扫描范围
确保 @RestControllerAdvice 类位于 Spring 组件扫描路径下。
异常匹配优先级
具体异常类型的处理器优先于通用异常处理器。
响应内容协商
支持根据请求的 Accept 头自动切换 JSON/XML 等格式(需配置对应转换器)。
通过合理使用 @RestControllerAdvice,可以实现异常处理与业务逻辑解耦,显著提升代码可维护性和 API 一致性。