動的な値をヘッダーに設定することは可能ですか?
@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
敬具
解決策は、偽の特定の注釈の代わりに@RequestHeader注釈を使用することです
@FeignClient(name="Simple-Gateway")
interface GatewayClient {
@RequestMapping(method = RequestMethod.GET, value = "/gateway/test")
String getSessionId(@RequestHeader("X-Auth-Token") String token);
}
@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);
}
@HeaderMap
Open feign を使用している場合は非常に便利なようです。この方法を使用すると、ヘッダーのキーと値を動的に渡すことができます。
@Headers({"Content-Type: application/json"})
public interface NotificationClient {
@RequestLine("POST")
String notify(URI uri, @HeaderMap Map<String, Object> headers, NotificationBody body);
}