Java 如何在春季(开机)装饰REST响应?

Java 如何在春季(开机)装饰REST响应?,java,json,spring,rest,spring-boot,Java,Json,Spring,Rest,Spring Boot,我有一个SpringBoot应用程序,它返回各种被编码为JSON响应的对象,我想对它们进行后期处理,并向某些超类添加信息 在我的REST端点使用Jackson编码为JSON之前,是否有方法过滤、截获等对象响应 筛选器无法工作,因为它在HttpServlet{Request,Response}级别运行 我猜ResponseBodyAdvice是你的朋友。基本上它: 允许在执行后自定义响应 @ResponseBody或ResponseEntity控制器方法,但在 正文是用HttpMessageCon

我有一个SpringBoot应用程序,它返回各种被编码为JSON响应的对象,我想对它们进行后期处理,并向某些超类添加信息

在我的REST端点使用Jackson编码为JSON之前,是否有方法过滤、截获等对象响应


筛选器无法工作,因为它在
HttpServlet{Request,Response}
级别运行

我猜
ResponseBodyAdvice
是你的朋友。基本上它:

允许在执行后自定义响应
@ResponseBody
ResponseEntity
控制器方法,但在 正文是用
HttpMessageConverter
编写的。 实现可以直接注册到
RequestMappingHandlerAdapter
ExceptionHandlerExceptionResolver
或 更可能用
@ControllerAdvice
注释,在这种情况下,它们将 两者都会自动检测到

在这里,我截取所有返回的
字符串
s,并使其大写:

@ControllerAdvice
public class MyResponseBodyAdvisor implements ResponseBodyAdvice<String> {
    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
        return returnType.getParameterType().equals(String.class);
    }

    @Override
    public String beforeBodyWrite(String body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        return body.toUpperCase();
    }
}
@ControllerAdvice
公共类MyResponseBodyAdvisor实现ResponseBodyAdvice{
@凌驾
公共布尔支持(MethodParameter returnType,Class>converterType){
返回returnType.getParameterType().equals(String.class);
}
@凌驾
BodyWrite之前的公共字符串(字符串正文、方法参数returnType、MediaType selectedContentType、Class>selectedConverterType、ServerHttpRequest请求、ServerHttpResponse响应){
返回body.toUpperCase();
}
}

控制器建议如何?