在我们的应用程序中,我们使用JSON进行请求和响应 . 控制器方法使用@RequestBody()进行注释 . 正在返回的对象,例如TransferResponse . 我想从@ResponseBody获取此对象 . 我已经设置了拦截器postHandle方法:
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws java.lang.Exception
{
....
}
那么如何在这个postHandle方法中获取JSON呢?
在此先感谢GM
4 回答
正如Pavel Horal已经提到的那样,当调用
postHandle()
方法时,响应体对象已经转换为JSON并写入响应 . 您可以尝试编写自己的自定义注释和方面,以拦截控制器响应主体对象 .使用
@EnableAspectJAutoProxy
启用对AspectJ方面的支持对于这种情况,我终于有一个工作(但不优雅)的解决方案 . 我认为可以有更好的解决方案,但我找不到 .
起初,我创建了一个请求和响应包装器,它封装了有效负载,使我的请求输入流和响应输出流可重用和可覆盖 . 我需要在我的过滤器中使用它来操作请求和响应有效负载 .
就像Pavel说的那样,你可能无法以这种方式得到JSON的响应 . 我认为最好的办法是实现一个Filter,在将响应写入客户端之前查看响应 . 看一下OncePerRequestFilter的起点 .
自问题发布以来,在Spring MVC 4.1中添加了ResponseBodyAdvice . 在应用转换器之前,此接口允许应用程序更改或完全更改主体 . documentation for intercepting requests也专门针对此问题进行了更新: