如何在Feign中使用自定义ApacheHttpClient?

时间:2019-02-27 18:49:47

标签: spring-cloud-feign netflix-feign feign

我尝试通过配置添加自定义HttpClient:

 @Bean
 public CloseableHttpClient httpClient() {
    RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(15000)
                .setConnectionRequestTimeout(15000)
                .build();

    Header header = new BasicHeader("Test", "Test");
    Collection<Header> headers =Arrays.asList(header);        
    return HttpClients.custom()
                .setDefaultRequestConfig(requestConfig)
                .setDefaultHeaders(headers)
                .build();
 }

但仍然,我的自定义添加的默认标头未出现在请求中。

我的Feign客户端界面如下所示:

@FeignClient(name = "example", 
             url = "${client.example.api}", 
             decode404 = false, 
             configuration = FeignClientConfiguration.class)
public interface ExampleFeignProxy{

    @PostMapping(path = "/create")
    @Headers("Content-Type: application/json")
    String Create(
            @RequestBody ExampleDTO exampleDto,
            @RequestHeader("access-token") String token);
}

但是当我向Create方法发出请求时,请求失败,当我检查configuration.errordecoder内部时,它表明feign在请求中也添加了额外的标头Content-Length。 如何从伪装客户端中的所有方法中删除默认标头?

为了清楚起见-如上所示,请求对象上应该只有两个标头

  • 内容类型

  • 访问令牌

但是Feign以某种方式也增加了Content-Length。

我需要设置某个配置吗?

1 个答案:

答案 0 :(得分:0)

实际上,这是一个误解,以上配置始终有效,我没有正确解析错误。返回的错误实际上是来自api。

我要做的就是正确地指定errordecoder。