【发布时间】:2016-05-19 13:50:38
【问题描述】:
在我的项目中,我有多个 API(使用 Spring REST API 实现)。 现在我有这个要求,我必须在将响应发送到客户端之前以特定方式操作响应,并且在每个 API 方法中更改它似乎不是一个好的选择。
我能想到的唯一解决方案是使用 servlet.Filter(通过扩展过滤器类)
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
> chain.doFilter(req, res);
然后写我的逻辑
chain.doFilter(req, res);
但我正在努力将 ServletResponse 或 HTTPServletResponse 转换为 HttpEntity。
请帮助我如何实现这一目标?有没有更好的方法?
谢谢
更新
@jny 解决方案帮助了我。
小代码 sn-p 显示它是如何工作的。
@ControllerAdvice(basePackages = { "com.test.controller" }) // package where it will look for the controllers.
public class ResponseFilter implements ResponseBodyAdvice<Object> {
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
ServerHttpResponse response) {
//here you can manipulate the body the way you want.
return body;
}
重要的是您的控制器应该使用 @ResponseBody
进行注释【问题讨论】:
-
你能补充一些细节吗?在您提出的过滤器之前,响应是什么样的?你希望它看起来像什么?
标签: java spring rest spring-mvc servlets