【发布时间】:2017-01-12 22:42:08
【问题描述】:
我正在使用 spring-boot-1.3.3。我想拦截 Rest 模板,我能够拦截它,但我无法访问 application.properties。它总是返回 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。
任何帮助都应该是可观的。
【问题讨论】:
-
你不是自己创建拦截器吗? (
new HeaderInterceptor()在你的代码中)? -
是的。我正在创建拦截器,并在restTemplate setInterceptors 方法中添加此拦截器。它工作正常。只是我想测试我们是否可以使用@Value 动态传递值,但它失败了。
-
就像 ritesh 所建议的那样,即使您已将 HeaderInterceptor 注释为由 spring(@Component) 管理。但是通过使用 new 运算符,实例化的 HeaderInterceptor 不是 spring 管理的,因此无法访问任何上下文值。拦截器在您的情况下有效,因为没有任何东西阻止流程(只是 clientHeader 属性变为空)。自动装配 HeaderInterceptor 并在 restTemplate 的 setInterceptor 方法中使用该自动装配属性。值可以动态传递。
标签: spring-mvc spring-boot resttemplate spring-restcontroller spring-rest