如何使用Feign客户端设置请求头?

6
我们正在使用Spring Cloud框架开发一套微服务,并且需要设置请求头。我知道可以在Feign方法中传递参数@RequestHeader,但是该值需要来自另一个bean。我不知道是否可以使用SPEL作为Feign参数值。
我认为这对大多数客户来说是常见的用例,所以应该会有一些示例,但到目前为止我还没有找到任何示例。当然,我可以查看Spring课程代码并尝试覆盖默认的Feign配置,但这有点违背了声明式客户端的目的,因为我必须编写很多代码才能实现这一点。
你有什么想法吗?
1个回答

10

我以前使用RequestInterceptor来执行此操作,代码如下:

@Component
public class MyRequestInterceptor implements RequestInterceptor {
  @Override
  public void apply(RequestTemplate template) {
    template.headers(getHeadersFromWherever());
  }
}

您可以在此处找到更多有用的信息:

https://github.com/Netflix/feign#user-content-setting-headers-per-target


你把这个放在哪里?Spring Cloud doc指出有一个FeignClientsConfiguration和一个FooConfiguration@FeignClient(name = "stores", configuration = FooConfiguration.class) public interface StoreClient {...} - Abhijit Sarkar
你可以将它放在任何被 @ComponentScan 包含的地方。 - RobP
3
如果你将拦截器包含在 @ComponentScan 中,拦截器将应用于所有 Feign 客户端。另一方面,如果在 FooConfiguration.class 中定义,则仅适用于特定的 Feign 客户端。 - Aleksandr Erokhin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接