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
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);
}
@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);
}