2016-07-14 10 views
2

私のSpringブートアプリケーションでは、クラスのafterCompletion()メソッドで応答にヘッダーを追加しようとしています。 POST要求次Spring HandlerInterceptorAdapterのhttpレスポンスにヘッダを追加するには?

return new ResponseEntity<>(mr, HttpStatus.OK); 

コントローラのようなResponseEntity<MyResource>オブジェクトを返します。

インターセプタでは、レスポンスにヘッダーを追加しようとすると、追加されません。

しかし、私はこのような応答を返すために、私のコントローラを変更する場合:

return new ResponseEntity<>(HttpStatus.OK); 

そして、それが動作します。

レスポンスボディがない場合にのみ、なぜヘッダを追加できますか?

レスポンスボディが存在する場合に追加する方法はありますか?

+0

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-handl-interceptor –

+3

「HandlerInterceptor」の「afterCompletion」メソッドが必ずしも理想的ではないことに注意してください'@ ResponseBody'と' ResponseEntity'メソッドで使用するためのものです。そのような場合、 'HttpMessageConverter'は' afterCompletion'が呼び出される前にレスポンスに書き込み、コミットします。これにより、ヘッダを追加するなど応答を変更することができなくなります。代わりに、アプリケーションは 'ResponseBodyAdvice'を実装し、それを' @ControllerAdvice' beanとして宣言するか、 'RequestMappingHandlerAdapter'で直接設定することができます。 –

答えて

1

Ali Deghaniのコメントのおかげで、私は正しい方向を指摘し、AbstractMappingJacksonResponseBodyAdviceクラス(これはResponseBodyAdviceの下に実装されています)を拡張する新しいクラスを作成しました。

私もそれがコントローラによって処理された後にこれは、特定の条件に基づいて、私は成功した新しいヘッダとレスポンスを変更することができhttp://cubiccow.blogspot.co.za/2014/10/api-versioning-of-rest-services.html

からヒントを得ました。

関連する問題