当前位置: 首页 > news >正文

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

关键注解解析
在这里插入图片描述
注意事项
包扫描范围
确保 @RestControllerAdvice 类位于 Spring 组件扫描路径下。
异常匹配优先级
具体异常类型的处理器优先于通用异常处理器。
响应内容协商
支持根据请求的 Accept 头自动切换 JSON/XML 等格式(需配置对应转换器)。
通过合理使用 @RestControllerAdvice,可以实现异常处理与业务逻辑解耦,显著提升代码可维护性和 API 一致性。

http://www.dtcms.com/a/63992.html

相关文章:

  • Adaptive AUTOSAR UCM模块——快速入门
  • 安卓Compose中accompanist库使用详解
  • 【蓝桥杯python研究生组备赛】003 贪心
  • Python Reverse Engineering的中文意思是什么?概念分析、工具与技术、实施步骤、扩展阅读?
  • 部署达梦数据库到服务器
  • MySQL:SQL优化实际案例解析(持续更新)
  • JDK8和JDK17 Thread.interrupt() 实现区别
  • 软件综合实践微人事管理信息系统+燃气站信息管理系统+mapbox地图(实际上使用的高德地图开发)
  • 深度学习GRU模型原理
  • 【Academy】服务器端模板注入 ------ Server-side template injection
  • k8s面经
  • Elasticsearch-07-Elasticsearch Java API Client-Elasticsearch 8.0 的高阶api
  • Jmeter 测试一个网站的并发量
  • PHP 在 if 判断时由于运算符优先级导致 false 的问题
  • 【具身相关】legged_gym, isaacgym、rsl_rl关系梳理
  • Qt表格美化笔记
  • 华为OD机试-求字符串中所有整数的最小和-逻辑分析(Java 2023 B卷 100分)
  • AGI大模型(2):GPT:Generative Pre-trained Transformer
  • 【Godot4.3】RenderingServer总结
  • 安装 MongoDB 的步骤(Windows / macOS / Linux)
  • 联合中存储平方差
  • FPGA 实现 OV5640 摄像头视频图像显示
  • 【spring】springAOP
  • navicat16 升级到 navicat17 之后原来的连接找不到了 mac用户
  • 侯捷 C++ 课程学习笔记:进阶语法之lambda表达式(二)
  • 利用8个参数定义一个汽轮机,然后根据这8个参数生成汽轮机性能试验时的测点清单-pycharm-源代码(适用所有类型汽轮机)
  • 【搜索页】- 功能流程
  • OpenHarmony-SELinux配置
  • 【git】 Could not read from remote repository.
  • 【Linux】线程池、单例模式、死锁