一尘不染

在Feign客户端+ Spring Cloud(Brixton RC2)中将@Headers与动态值一起使用

spring

是否可以将动态值设置为标头?

@FeignClient(name="Simple-Gateway")
interface GatewayClient {
    @Headers("X-Auth-Token: {token}")
    @RequestMapping(method = RequestMethod.GET, value = "/gateway/test")
        String getSessionId(@Param("token") String token);
    }

注册RequestInterceptor的实现会添加标头,但是无法动态设置标头值

@Bean
    public RequestInterceptor requestInterceptor() {

        return new RequestInterceptor() {

            @Override
            public void apply(RequestTemplate template) {

                template.header("X-Auth-Token", "some_token");
            }
        };
    } 

我在github上发现了以下问题,其中一个注释者(lpborges)试图使用@RequestMapping注释中的标头做类似的事情。


阅读 487

收藏
2020-04-19

共1个答案

一尘不染

解决方案是使用@RequestHeader批注而不是伪装的特定批注

@FeignClient(name="Simple-Gateway")
interface GatewayClient {    
    @RequestMapping(method = RequestMethod.GET, value = "/gateway/test")
    String getSessionId(@RequestHeader("X-Auth-Token") String token);
}
2020-04-19