56

ヘッダーに動的な値を設定することは可能ですか?

@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

敬具

4

6 に答える 6

93

解決策は、特定のアノテーションを装う代わりに @RequestHeader アノテーションを使用することです

@FeignClient(name="Simple-Gateway")
interface GatewayClient {    
    @RequestMapping(method = RequestMethod.GET, value = "/gateway/test")
    String getSessionId(@RequestHeader("X-Auth-Token") String token);
}
于 2016-05-06T23:26:07.683 に答える
0

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

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

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

次に、偽の REST クライアントを作成してサービス エンドポイントを呼び出し、ヘッダー プロパティ マップを作成してメソッド パラメーターに渡します。

NotificationClient notificationClient = Feign.builder()
    .encoder(new JacksonEncoder())
    .decoder(customDecoder())
    .target(Target.EmptyTarget.create(NotificationClient.class));

Map<String, Object> headers = new HashMap<>();
headers.put("x-api-key", "x-api-value");

ResponseEntity<String> response = notificationClient.notify(new URI("https://stackoverflow.com/example"), headers, new NotificationBody());
于 2019-06-27T12:19:37.507 に答える