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

ResponseBodyAdvice是什么?

ResponseBodyAdvice是什么?

在Spring MVC中,ResponseBodyAdvice是一个强大的扩展接口,用于在响应体被HttpMessageConverter写入响应流之前对其进行拦截和处理。它可以统一修改、增强或转换Controller返回的响应数据,是实现全局响应处理的重要工具。

一、基本概念

ResponseBodyAdvice位于org.springframework.web.servlet.mvc.method.annotation包下,其核心作用是:
拦截Controller方法返回的响应数据(通过@ResponseBody@RestController标识的方法),在数据被转换成HTTP响应体之前进行自定义处理

二、核心方法

ResponseBodyAdvice接口定义了两个核心方法,需要实现类重写:

1. supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType)
  • 作用:判断当前ResponseBodyAdvice是否支持处理当前请求的返回类型和消息转换器。
  • 参数
    • returnType:Controller方法的返回类型信息(包含方法、参数、注解等)。
    • converterType:用于处理响应体的HttpMessageConverter类型(如MappingJackson2HttpMessageConverter用于JSON转换)。
  • 返回值boolean类型,true表示支持处理,会执行beforeBodyWrite方法;false表示不处理。
2. beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response)
  • 作用:在响应体被写入响应流之前,对响应数据(body)进行处理。
  • 参数
    • body:Controller方法返回的原始数据(可能为null)。
    • returnType:同supports方法,返回类型信息。
    • selectedContentType:选中的响应媒体类型(如application/json)。
    • selectedConverterType:选中的消息转换器类型。
    • request:当前请求对象。
    • response:当前响应对象(可用于设置响应头、状态码等)。
  • 返回值:处理后的响应数据(类型需与原始body兼容,否则可能导致转换失败)。

三、使用方式

要使用ResponseBodyAdvice,需创建一个实现类,并通过@ControllerAdvice注解标识(使其成为全局增强器,被Spring扫描并应用)。

示例:统一响应格式

最常见的场景是将所有接口的响应数据统一包装成固定格式(如{code: 200, message: "success", data: ...}),避免在每个Controller中重复处理。

http://www.xdnf.cn/news/1279423.html

相关文章:

  • ChatML vs Harmony:深度解析OpenAI全新对话结构格式的变化
  • ARM基础概念 day51
  • Redis应⽤-缓存与分布式锁
  • Vue3从入门到精通:3.1 性能优化策略深度解析
  • 基于SpringBoot+Uniapp的血压监控小程序(Echarts图形化分析)
  • OV5640 相机开发流程
  • Apollo平台下相机和激光雷达手眼联合标定
  • 游戏引擎(Unreal Engine、Unity、Godot等)大对比:选择最适合你的工具
  • 2025世界机器人大会,多形态机器人开启商业化落地浪潮
  • ubuntu24.04设置登陆背景图片
  • 工业相机与智能相机的区别
  • word的正则替换
  • 《解锁 C++ 进阶密码:引用补充与内联函数、nullptr 核心用法》
  • 【测试报告】SoundWave(Java+Selenium+Jmeter自动化测试)
  • 2025 年国内可用 Docker 镜像加速器地址
  • 前端组件库双雄对决:Bootstrap vs Element UI 完全指南
  • Flink TableAPI 按分钟统计数据量
  • Spring AI赋能图像识别:大数据模型驱动下的智能化变革
  • SAE J2716多协议网关的硬件架构与实时协议转换机制解析
  • calamine读取xlsx文件的方法比较
  • 华为虚拟防火墙配置案例详解
  • 未来物联网大模型:物联网硬件+底层驱动+AI 自动生成和调优LUA脚本,
  • 数据备份与进程管理
  • TikTok登录时显示“访问太频繁,请稍后再试”该怎么办?
  • 【数据库】如何使用一款轻量级数据库SqlSugar进行批量更新,以及查看最终的Sql操作语句
  • 【车联网kafka】Kafka核心架构与实战经验(第三篇)
  • Python FastAPI + React + Nginx 阿里云WINDOWS ECS部署实战:从标准流程到踩坑解决全记录
  • 2025面试题——(12)
  • docker部署elasticsearch-8.11.1
  • <typeAliases>