web-dev-qa-db-fra.com

Jersey 2.x: comment ajouter des en-têtes sur un client RESTful

J'ai déjà examiné Comment ajouter des en-têtes sur un appel RESTful à l'aide de l'API client Jersey , cependant, il s'agit de Jersey 1.x. 

Comment définir une valeur d'en-tête (telle qu'un jeton d'autorisation) dans Jersey 2.21? 

Voici le code que j'utilise: 

public static String POST(final String url, final HashMap<String, String> params)
{
    ClientConfig config = new ClientConfig();
    Client client = ClientBuilder.newClient(config);

    WebTarget target = client.target(url);

    String data = new Gson().toJson(params);

    Entity json = Entity.entity(data, MediaType.APPLICATION_JSON_TYPE);
    Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE);
    return builder.post(json, String.class);
}
10
Joshua Kissoon

Dans Jersey 2.0+, vous pouvez enregistrer une implémentation personnalisée de ClientRequestFilter qui peut manipuler les en-têtes dans la demande envoyée par l'API client.

Vous pouvez manipuler les en-têtes via le paramètre ClientRequestContext qui est transmis à la méthode filter. La méthode getHeaders() renvoie la MultivaluedMap sur laquelle vous pouvez put votre (vos) en-tête (s).

Vous pouvez vous inscrire votre ClientRequestFilter personnalisée avec votre ClientConfig avant d'appeler newClient.

config.register(MyAuthTokenClientRequestFilter.class);
9
rgettman

Si vous souhaitez ajouter uniquement quelques en-têtes dans le client Jersey 2.x, vous pouvez simplement l'ajouter lorsque la demande est envoyée, comme suit.

webTarget.request().header("authorization":"bearer jgdsady6323u326432").post(..)...
8
Madura Pradeep

Pour ajouter à ce que Pradeep a dit, il existe également des en-têtes (MultivaluedMap <String, Objects> sous WebTarget.request () si vous avez une multitude d'en-têtes:

MultivaluedMap head = new MultivaluedHashMap();

head.add("something-custom", new Integer(10));
head.add("Content-Type", "application/json;charset=UTF-8");

builder.headers ( head ); // builder from Joshua's original example
0
mojo-jojo