web-dev-qa-db-fra.com

Utilisation de @Headers avec des valeurs dynamiques dans Feign client + Spring Cloud (Brixton RC2)

Est-il possible de définir des valeurs dynamiques dans un en-tête?

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

L'enregistrement d'une implémentation de RequestInterceptor ajoute l'en-tête, mais il n'y a aucun moyen de définir la valeur de l'en-tête de manière dynamique.

@Bean
    public RequestInterceptor requestInterceptor() {

        return new RequestInterceptor() {

            @Override
            public void apply(RequestTemplate template) {

                template.header("X-Auth-Token", "some_token");
            }
        };
    } 

J'ai trouvé le problème suivant sur github et l'un des commentateurs (lpborges) essayait de faire quelque chose de similaire en utilisant des en-têtes dans l'annotation @RequestMapping.

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

Sincères amitiés

16
Hasnain

La solution consiste à utiliser l'annotation @RequestHeader au lieu de simuler des annotations spécifiques

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

@RequestHeader n'a pas fonctionné pour moi. Quel a été le travail:

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

J'ai cet exemple et j'utilise @HeaderParam à la place de @RequestHeader:

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
Oscar Raig Colon