【问题标题】:How can I decorate the REST response in Spring (Boot)?如何在 Spring(Boot)中装饰 REST 响应?
【发布时间】:2016-05-01 04:19:52
【问题描述】:
我有一个 Spring Boot 应用程序,它返回各种被编码为 JSON 响应的对象,我想对它们进行后处理并将信息添加到某些超类。
在我的 REST 端点被 Jackson 编码为 JSON 之前,有没有办法过滤、拦截等对象响应。
过滤器不起作用,因为它在HttpServlet{Request,Response} 级别运行。
【问题讨论】:
标签:
java
json
spring
rest
spring-boot
【解决方案1】:
我猜ResponseBodyAdvice 是你的朋友。基本上就是这样:
允许在执行一个响应后自定义响应
@ResponseBody 或 ResponseEntity 控制器方法,但在
正文用HttpMessageConverter 编写。
实现可以直接注册
RequestMappingHandlerAdapter 和 ExceptionHandlerExceptionResolver 或
更有可能用 @ControllerAdvice 注释在这种情况下,他们将
被两者自动检测到。
我在这里截取所有返回的Strings 并将它们设为大写:
@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();
}
}