如何在Spring(Boot)中修饰REST响应?
我有一个Spring Boot应用程序,它返回被编码为JSON响应的各种对象,我想对它们进行后处理并向某些超类添加信息。
有没有办法过滤,拦截等来自我的REST端点的对象响应,然后才能用Jackson编码为JSON。
filter无法工作,因为它在HttpServlet{Request,Response}
级别运行。
我猜ResponseBodyAdvice
是你的朋友。 基本上它:
允许在执行
@ResponseBody
或ResponseEntity
控制器方法之后但在使用HttpMessageConverter
编写正文之前自定义响应。 实现可以直接使用RequestMappingHandlerAdapter
和ExceptionHandlerExceptionResolver
注册,或者更可能使用@ControllerAdvice
注释,在这种情况下,它们将被两者自动检测。
在这里我拦截所有返回的String
并使它们大写:
@ControllerAdvice public class MyResponseBodyAdvisor implements ResponseBodyAdvice { @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(); } }