在 Feign 客户端 Spring Cloud (Brixton RC2) 中使用带有动态值的@Headers

新手上路,请多包涵

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

 @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 注释中使用标头做类似的事情。

https://github.com/spring-cloud/spring-cloud-netflix/issues/288

亲切的问候

原文由 Hasnain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 534
2 个回答

解决方案是使用@RequestHeader注解,而不是feign特定的注解

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

原文由 Hasnain 发布,翻译遵循 CC BY-SA 3.0 许可协议

@RequestHeader 对我不起作用。起作用的是:

 @Headers("X-Auth-Token: {access_token}")
@RequestLine("GET /orders/{id}")
Order get(@Param("id") String id, @Param("access_token") String accessToken);

原文由 Carlos Alberto Schneider 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题