2016-07-23 18 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

関連する問題