ResponseBodyAdvice是什么?

发布于:2025-08-12 ⋅ 阅读:(14) ⋅ 点赞:(0)

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中重复处理。


网站公告

今日签到

点亮在社区的每一天
去签到