当前位置: 首页 > 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.dtcms.com/a/326295.html

相关文章:

  • 基于动态顺序表实现【通讯录系统】:有文件操作部分哦!
  • Oracle主从incarnation不一致问题解决
  • ComfyUI安装
  • 【96页PPT】华为IPD流程管理详细版(附下载方式)
  • 强化学习常用数据集
  • HBase BlockCache:LRU Cache
  • Qt界面优化
  • TD-IDF的一些应用
  • 降压型DCDC电源芯片推荐-芯伯乐XBL4001 40V/5A
  • Python3.10 + Firecrawl 下载 Markdown 文档:构建高效通用文章爬虫
  • 深度学习 --- 迁移学习以及onnx推理
  • 自建Web应用防火墙(WAF)
  • 前端面试:promise...then与asnyc ...await
  • 华为Atlas 200 DK 板卡使用技巧记录(一)修改板卡IP
  • Pytest项目_day12(yield、fixture的优先顺序)
  • CobaltStrike钓鱼鱼饵制作的方式(chm、doc、execl、exe、powshell 上线cs)
  • [特殊字符] OpenCV图像预处理与ResNet-50深度学习分类实战
  • 元数据管理与数据治理平台:Apache Atlas 关系搜索 Relationship Search
  • AI产品经理手册(Ch12-16)AI Product Manager‘s Handbook学习笔记
  • 使用纯NumPy实现回归任务:深入理解机器学习本质
  • C++安装使用eigen库时出现warning C4819问题的解决方案
  • 【网络运维】Linux:LNMP 项目实践
  • NodeJs》》url地址参数 解析 URLSearchParams querystring
  • vscode的wsl环境,怎么打开linux盘的工程?
  • CSS彩虹七色十六进制值
  • langmem
  • 排序与查找,简略版
  • 《算法导论》第 18 章 - B 树
  • linux 秒 安装谷歌浏览器 区分ubuntu和centos 给python爬取网站使用
  • Haystack:面向大模型应用的模块化检索增强生成(RAG)框架