Java 如何在春季(开机)装饰REST响应?
我有一个SpringBoot应用程序,它返回各种被编码为JSON响应的对象,我想对它们进行后期处理,并向某些超类添加信息 在我的REST端点使用Jackson编码为JSON之前,是否有方法过滤、截获等对象响应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
筛选器无法工作,因为它在
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();
}
}
控制器建议如何?