Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using @Headers with dynamic values in Feign client + Spring Cloud (Brixton RC2)

Is it possible to set dynamic values to a header ?

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

Registering an implementation of RequestInterceptor adds the header but there is no way of setting the header value dynamically

@Bean     public RequestInterceptor requestInterceptor() {          return new RequestInterceptor() {              @Override             public void apply(RequestTemplate template) {                  template.header("X-Auth-Token", "some_token");             }         };     }  

I found the following issue on github and one of the commenters (lpborges) was trying to do something similar using headers in @RequestMapping annotation.

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

Kind Regards

like image 764
Hasnain Avatar asked May 06 '16 07:05

Hasnain


2 Answers

The solution is to use @RequestHeader annotation instead of feign specific annotations

@FeignClient(name="Simple-Gateway") interface GatewayClient {         @RequestMapping(method = RequestMethod.GET, value = "/gateway/test")     String getSessionId(@RequestHeader("X-Auth-Token") String token); } 
like image 54
Hasnain Avatar answered Oct 04 '22 11:10

Hasnain


The @RequestHeader did not work for me. What did work was:

@Headers("X-Auth-Token: {access_token}") @RequestLine("GET /orders/{id}") Order get(@Param("id") String id, @Param("access_token") String accessToken); 
like image 28
Carlos Alberto Schneider Avatar answered Oct 04 '22 12:10

Carlos Alberto Schneider