web-dev-qa-db-ja.com

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で次の問題を発見し、コメンターの1つ(lpborges)が@RequestMappingアノテーションのヘッダーを使用して同様のことを行おうとしていました。

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

敬具

23
Hasnain

解決策は、偽の特定の注釈の代わりに@RequestHeader注釈を使用することです

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

@RequestHeaderは機能しませんでした。うまくいったのは:

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

私はこの例を持っていますが、@RequestHeaderの代わりに@HeaderParamを使用します:

import rx.Single;

import javax.ws.rs.Consumes;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;


@Consumes(MediaType.APPLICATION_JSON)
public interface  FeignRepository {

  @POST
  @Path("/Vehicles")
  Single<CarAddResponse> add(@HeaderParam(HttpHeaders.AUTHORIZATION) String authorizationHeader, VehicleDto vehicleDto);

}
1

@HeaderMapOpen feign を使用している場合は非常に便利なようです。この方法を使用すると、ヘッダーのキーと値を動的に渡すことができます。

@Headers({"Content-Type: application/json"})
public interface NotificationClient {

    @RequestLine("POST")
    String notify(URI uri, @HeaderMap Map<String, Object> headers, NotificationBody body);
}
0
Muhammad Usman