2016-07-23 68 views
4

我有要求编辑我的HttpResponse添加标题值。我正在寻找单点来实现它,并发现ResponseBodyadvice会有所帮助。如何将ResponseBodyAdvice实现到所有控制器?

但是这两种方法在我的新课程中都没有被调用过。你能否告诉我是否错过了任何配置。

@ControllerAdvice 
public class EditResponseHeader implements ResponseBodyAdvice<object> { 


@Override 
public boolean supports(MethodParameter returnType, 
     Class<? extends HttpMessageConverter<?>> converterType) { 

    return true; 
} 

.... 

@Override 
public Object beforeBodyWrite(Object body, MethodParameter returnType, 
     MediaType selectedContentType, 
     Class<? extends HttpMessageConverter<?>> selectedConverterType, 
     ServerHttpRequest request, ServerHttpResponse response) { 

    .... 

    return body; 
} 

} 
+0

我所有的控制器都具有@RequestMapping注解和MVC是注解驱动。我也使用MappingJackson2Json作为默认视图 – Ultimata

回答

0

关于什么:

@Override 
@ExceptionHandler(Exception.class) 
     public Response<?> beforeBodyWrite(Response<?> body, MethodParameter returnType, 
       MediaType selectedContentType, 
       Class<? extends HttpMessageConverter<?>> selectedConverterType, 
       ServerHttpRequest request, ServerHttpResponse response) { 

      .... 

      return body; 
     } 
+0

如何将beforeBodyWrite的返回类型从对象事物更改为响应? – Ultimata

+0

可能通过以下链接帮助您找到解决方案。 http://stackoverflow.com/questions/21884737/controlleradvice-not-firing –

+2

当我用'@ InitBinder'或'@ ExceptionHandler'编写任何方法时,它的工作正常,但是@ ExceptionHandler'只在异常是在执行控制器之前调用'@ initBinder'。我的要求是在执行每个控制器之后调用此方法,而不仅仅是在抛出异常时。 – Ultimata

相关问题