Spring引导无法访问ClientHttpRequestInterceptor中的@Value

时间:2016-09-05 14:22:13

标签: spring-mvc spring-boot resttemplate spring-restcontroller spring-rest

我正在使用spring-boot-1.3.3。我想拦截Rest模板,我能够拦截它但我无法访问application.properties.It总是返回null。

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);
}
}

我总是将“clientHeader”键设为null。

任何帮助都应该是值得的。

2 个答案:

答案 0 :(得分:3)

我在评论中提到您在new关键字的代码中自己创建了拦截器。要使用HeaderInterceptor的spring上下文实例,您需要在代码中 autowire 。然后,它将具有弹簧管理属性的可见性。

答案 1 :(得分:0)

您可以为拦截器配置@Bean,这将确保@Autowired字段确实是自动装配的,然后使用它们来配置客户端。

之前:

requireValueInList

之后:

client.setInterceptors(new ClientInterceptor[] {new CustomInterceptor()});