代码之家  ›  专栏  ›  技术社区  ›  VelNaga

弹簧引导无法访问ClientHttpRequestInterceptor内的@Value

  •  3
  • VelNaga  · 技术社区  · 9 年前

    我正在使用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);
    }
    }
    

    我总是得到 “客户端标题” 键为空。

    任何帮助都应该是可观的。

    2 回复  |  直到 9 年前
        1
  •  4
  •   ritesh.garg    9 年前

    我看到你在评论中提到你在代码中自己创建拦截器 new 关键字。为了使用HeaderInterceptor的spring上下文实例,您需要 自动装配 它在您的代码中。只有这样,它才能看到spring管理的属性。

        2
  •  0
  •   maheeka    5 年前

    之前:

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

    之后:

     @Bean
     public CustomInterceptor customInterceptor() {
        return new CustomInterceptor();
     }
    
     //in the client construction, set the interceptor as below.
     client.setInterceptors(new ClientInterceptor[] {customInterceptor()});