2

私はspring-boot-1.3.3を使用しています。休憩テンプレートを傍受したいと思いますが、私はそれを傍受することができますが、application.propertiesにアクセスできません。 。SpringブートはClientHttpRequestInterceptorの@Valueにアクセスできない

package com.sample.filter; 

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.http.HttpHeaders; 
import org.springframework.http.HttpRequest; 
import org.springframework.http.client.ClientHttpRequestExecution; 
import org.springframework.http.client.ClientHttpRequestInterceptor; 
import org.springframework.http.client.ClientHttpResponse; 
import org.springframework.stereotype.Component; 

import java.io.IOException; 

@Component 
public class HeaderInterceptor implements ClientHttpRequestInterceptor{ 

private static final String CLIENT_HEADER = "x-client"; 

@Value("${clientHeader}") 
private String ClientHeader; 

@Override 
public ClientHttpResponse intercept(HttpRequest httpRequest, byte[] body, ClientHttpRequestExecution execution) throws IOException { 
    HttpHeaders headers = httpRequest.getHeaders(); 
    headers.add(CLIENT_HEADER, ClientHeader); 
    return execution.execute(httpRequest, body); 
} 
} 

私は常にnullとして"clientHeader"キーを取得しています。

何か助けが必要です。

+0

あなた自身でインターセプタを作成していませんか? (あなたのコードで 'new HeaderInterceptor()')? –

+0

はい。インターセプタを作成していますが、このインターセプタをrestTemplateのsetInterceptorsメソッドに追加しています。正しく動作しています。私は@Valueで値を動的に渡すことができるかどうかをテストしたいが、失敗する。 – VelNaga

+1

春(@Component)で管理するHeaderInterceptorに注釈を付けていても、riteshはうまくいきました。しかし、new演算子を使用することによって、HeaderInterceptorはインスタンス化されてもスプリング管理されないため、コンテキスト値にはアクセスできません。インターセプタは、フローを停止させる何もないので(あなたのclientHeaderプロパティがnullになる)、あなたのケースで動作します。 HeaderInterceptorをオートワイヤし、そのautowired属性をrestTemplateのsetInterceptorメソッドで使用します。値は動的に渡すことができます。 –

答えて

2

私はあなたのコメントに、newキーワードでコードにインターセプターを自分で作成していると述べました。 HeaderInterceptorのSpringコンテキストインスタンスを使用するには、コード内にをautowireにする必要があります。その後、それは春管理プロパティの可視性を持つことになります。

関連する問題