2

스프링 부트 1.3.3을 사용하고 있습니다. 나머지 템플리트를 가로 채고 싶지만 가로 챌 수 있지만 application.properties에 액세스 할 수 없습니다. 항상 null을 반환합니다. .스프링 부트가 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를 Autowire하고 restTemplate의 setInterceptor 메소드에서 autowired 속성을 사용하십시오. 이 값은 동적으로 전달 될 수 있습니다. –

답변

2

나는 당신이 당신의 의견에서 당신이 코드에 new 키워드로 인터셉터를 만들고 있다고 언급했음을 본다. HeaderInterceptor의 스프링 컨텍스트 인스턴스를 사용하려면 코드에서을 autowire해야합니다. 그런 다음에 만 봄 관리 속성을 볼 수 있습니다.