【发布时间】:2014-11-05 12:06:04
【问题描述】:
我有几个控制器使用@ResponseBody 注释返回相同的通用响应对象,如下所示:
@RequestMapping(value = "/status", method = RequestMethod.GET)
@Transactional(readOnly = true)
public @ResponseBody Response<StatusVM> status()
在返回响应后,我需要对每个控制器执行操作。此操作将使用新数据丰富 Response 对象。
我不想重复代码,所以我需要单点干预。我以为我可以用拦截器来做到这一点,但是,根据文档http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor 这不适用于@ResponseBody:
请注意,HandlerInterceptor 的 postHandle 方法并不总是非常适合与 @ResponseBody 和 ResponseEntity 方法一起使用。在这种情况下,HttpMessageConverter 在调用 postHandle 之前写入并提交响应,这使得无法更改响应,例如添加标头。相反,应用程序可以实现 ResponseBodyAdvice 并将其声明为 @ControllerAdvice bean 或直接在 RequestMappingHandlerAdapter 上进行配置。
我找不到这种技术的例子,有人可以帮助我吗?
作为替代方案,我可以使用方面,但是我需要注释每个控制器,这是我想避免的。
【问题讨论】:
标签: json spring-mvc controller interceptor