当前位置: 首页 > 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.lryc.cn/news/617369.html

相关文章:

  • Agent用户体验设计:人机交互的最佳实践
  • Cobalt Strike的简单搭建与使用
  • ARM基础概念 day51
  • 环境配置-拉取NVIDIA Docker镜像时出现401Unauthorized错误
  • Redis 01 数据结构
  • 第7节 大模型性能评估与优化方法指南
  • Web 开发前端与后端 API 的交互
  • 101. 孤岛的总面积
  • 区块链技术原理(5)-网络
  • 《深度解构:React与Redux构建复杂表单的底层逻辑与实践》
  • (附源码)基于Spring Boot的4S店信息管理系统 的设计与实现
  • 虚拟财产刑事辩护:跨地域性与匿名性带来的挑战
  • 【C/C++】(struct test*)0->b 讲解
  • 从零开始的ReAct Agent尝试
  • HTTPS应用层协议-中间攻击人
  • SharePlay确保最佳游戏体验
  • 前端SVG图标URL编码与嵌入
  • POI导入时相关的EXCEL校验
  • 【数据库】如何使用一款轻量级数据库SqlSugar进行批量更新,以及查看最终的Sql操作语句
  • Flink TableAPI 按分钟统计数据量
  • MSE ZooKeeper:Flink高可用架构的企业级选择
  • 容器之王--Docker的安全优化详解及演练
  • 【96页PPT】华为IPD流程管理详细版(附下载方式)
  • ARM汇编
  • word格式设置-论文写作,样式,字号等
  • 【大模型】强化学习算法总结
  • 用户管理系统后台管理界面
  • Python面试题及详细答案150道(41-55) -- 面向对象编程篇
  • VBA即用型代码手册:计算选择的单词数Count Words in Selection
  • 5种无需USB线将照片从手机传输到笔记本电脑的方法