2

我正在尝试使用 feign 客户端发送自定义主机标头,但消费者应用程序没有选择它们。我使用的是spring boot feign而不是openfeign。

除了主机之外,其他所有标头似乎都按预期工作。

 ResponseEntity<JSONObject> list(@PathVariable("name") String name,
            @RequestParam("id") String id, @RequestParam("modelName") String modelName,
            @RequestHeader(value = "Authorization", required = true) String authorizationHeader,
            @RequestHeader(value = "Host", required = true) String hostName);

当我将主机名作为“xyz.com”传递时,消费者应用程序仍采用默认主机头。

在消费者代码中,当我从控制器类读取主机标头的值时,我没有得到 zyz.com。相反,它从 dns 名称中选择。

4

2 回答 2

1

同样的问题发生在我身上 -@Param并且@Headers不适用于“主机”标题。我改变的两件事解决了这个问题 - use OkHttpClient,并requestInterceptor在构建客户端时添加:

client = Feign.builder()
    .client(new OkHttpClient())
    .requestInterceptor(request -> request.header("Host", hostHeaderValue))
    .target(MyClient.class, url);
于 2021-06-17T15:52:54.317 回答
0

该解决方案包含在 springframework 中。添加你的属性文件:

feign.okhttp.enabled = true

并添加okhttp3的依赖,pom中的例子

<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
</dependency>

你可以在这里找到更多信息

于 2021-10-20T08:53:38.850 回答