2015-09-11 10 views
7

Ho già visto How to add Headers on RESTful call using Jersey Client API, tuttavia questo è per Jersey 1.x.Jersey 2.x: Come aggiungere intestazioni su RESTful Client

Come impostare un valore di intestazione (ad esempio un token di autorizzazione) in Jersey 2.21?

Ecco il codice che sto utilizzando:

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); 
} 
+1

E 'più o meno la stessa cosa nel Jersey 2. Suggerimento, guarda un javadoc per ['Invocation.Builder'] (https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Invocation.Builder.html) –

+0

C'è una risposta abbastanza buona da @rgettman - se risolve la domanda, dovresti accettarla. –

risposta

6

In Jersey 2.0+, è possibile registrare un'implementazione personalizzata di ClientRequestFilter che può manipulate the headers nella richiesta che l'API client invierà.

È possibile modificare le intestazioni tramite il parametro ClientRequestContext passato al metodo filter. Il getHeaders() method restituisce il MultivaluedMap su cui è possibile put l'intestazione (s).

È possibile register personalizzato ClientRequestFilter con il ClientConfig prima di chiamare newClient.

config.register(MyAuthTokenClientRequestFilter.class); 
3

Se si desidera aggiungere solo pochi intestazioni a Jersey client 2.x, si può semplicemente aggiungere quando richiesta sta inviando come segue.

webTarget.request().header("authorization":"bearer jgdsady6323u326432").post(..)... 
0

Per aggiungere a quanto ha detto Pradeep, c'è anche intestazioni (MultivaluedMap < String, Oggetti> sotto WebTarget.request() se si dispone di un branco di intestazioni:

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