2017-12-06 4 views
0

私はスプリングブートを使用しています。 すべての応答のヘッダーにフィールドを追加します。そう、私は迎撃器を使用しています。スプリングブートのインターセプタを使用してヘッダにさらにフィールドを追加してください。

@Component 
public class ApiVersionInterceptor extends HandlerInterceptorAdapter{ 
    private final Logger log = LoggerFactory.getLogger(ApiVersionInterceptor.class); 

    @Autowired 
    private Environment environment; 

    @Override 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
           Object handler, Exception arg3) throws Exception { 
     String apiVersion = environment.getProperty(ApiVersion.VERSION_KEY.getKey()); 
     log.debug("api-version:"+apiVersion); 
     response.addHeader("Api-Version", apiVersion); 
    } 
} 

と設定は次のとおりです:コードがある

@Configuration 
public class InterceptorsConfiguration extends WebMvcConfigurerAdapter { 

    @Autowired 
    private ApiVersionInterceptor apiVersionInterceptor; 

    /** 
    * Add interceptor 
    */ 
    @Override 
    public void addInterceptors(final InterceptorRegistry registry) { 

     //Add api-version field to header of response 
     registry.addInterceptor(apiVersionInterceptor); 
    } 

} 

が原因で実行され、これはコードを切り取ら確認するには:

2017-12-06 02:35:10,392 DEBUG [] [http-nio-8080-exec-7] ApiVersionInterceptor: api-version:1.9.0 

しかし、私は、私ドンを理解していません応答のヘッダーにこのフィールドが表示されません。

更新

私のアプリは、RESTfulなWebサービスを使用するので、ビューの位相を持っていません。

ありがとうございました。

答えて

1

ApiVersionInterceptorpreHandleメソッドよりも前の段階でヘッダーを追加する必要があります。 afterCompletionの応答がすでにコミットされているため、ヘッダーの変更がスキップされます。

+0

私は 'prehandle()'または 'postHandle()'を使用しています。何も起こらない。 –

+0

小さなデモを作成し、restClientによってチェックされていると、スクリーンショットへのリンク[ScreenShot](http://prntscr.com/hjq9lj)があります。それはあなたのためにうまくいかなかったのはなぜか、奇妙です。必要ならば私はこのデモをgitにプッシュすることができます、ちょうどコメント。 – borino

+0

ありがとうございました。私は小さなプロジェクトを作り直してみましょう。それは私の会社のプロジェクトなので、私はプロジェクトをプッシュできません。 –

関連する問題