目录

RestControllerAdvice注解

目录

@RestControllerAdvice注解

@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);
    }
}

关键注解解析

https://i-blog.csdnimg.cn/direct/007022e3e2cd44d986c3d370316ed3ac.png#pic_center

注意事项

包扫描范围

确保 @RestControllerAdvice 类位于 Spring 组件扫描路径下。

异常匹配优先级

具体异常类型的处理器优先于通用异常处理器。

响应内容协商

支持根据请求的 Accept 头自动切换 JSON/XML 等格式(需配置对应转换器)。

通过合理使用 @RestControllerAdvice,可以实现异常处理与业务逻辑解耦,显著提升代码可维护性和 API 一致性。