私のSpringブートアプリケーションでは、クラスのafterCompletion()
メソッドで応答にヘッダーを追加しようとしています。 POST
要求次Spring HandlerInterceptorAdapterのhttpレスポンスにヘッダを追加するには?
return new ResponseEntity<>(mr, HttpStatus.OK);
:
コントローラのようなResponseEntity<MyResource>
オブジェクトを返します。
インターセプタでは、レスポンスにヘッダーを追加しようとすると、追加されません。
しかし、私はこのような応答を返すために、私のコントローラを変更する場合:
return new ResponseEntity<>(HttpStatus.OK);
そして、それが動作します。
レスポンスボディがない場合にのみ、なぜヘッダを追加できますか?
レスポンスボディが存在する場合に追加する方法はありますか?
http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-handl-interceptor –
「HandlerInterceptor」の「afterCompletion」メソッドが必ずしも理想的ではないことに注意してください'@ ResponseBody'と' ResponseEntity'メソッドで使用するためのものです。そのような場合、 'HttpMessageConverter'は' afterCompletion'が呼び出される前にレスポンスに書き込み、コミットします。これにより、ヘッダを追加するなど応答を変更することができなくなります。代わりに、アプリケーションは 'ResponseBodyAdvice'を実装し、それを' @ControllerAdvice' beanとして宣言するか、 'RequestMappingHandlerAdapter'で直接設定することができます。 –