2015-09-11 9 views
7

Ich habe bereits How to add Headers on RESTful call using Jersey Client API betrachtet, jedoch ist dies für Jersey 1.x.Jersey 2.x: Hinzufügen von Kopfzeilen auf RESTful Client

Wie setze ich einen Header-Wert (wie ein Autorisierungs-Token) in Jersey 2.21? Hier

ist der Code Ich verwende:

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

Es ist so ziemlich das Gleiche im Jersey 2. Tipp, schau dir das Javadoc für ['Invocation.Builder'] an (https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Invocation.Builder.html) –

+0

Es gibt eine ziemlich gute Antwort von @Rettman - wenn es die Frage löst, sollten Sie es akzeptieren. –

Antwort

6

In Jersey 2.0+ können Sie eine benutzerdefinierte Implementierung von ClientRequestFilter registrieren, die manipulate the headers kann in der Anforderung, dass die Client-API aussenden.

Sie können die Header über den Parameter ClientRequestContext bearbeiten, der an die Methode filter übergeben wird. Die getHeaders() method gibt die MultivaluedMap zurück, auf der Sie Ihre Kopfzeile (n) put können.

Sie können register Ihre benutzerdefinierte ClientRequestFilter mit Ihrer ClientConfig bevor Sie newClient anrufen.

config.register(MyAuthTokenClientRequestFilter.class); 
3

Wenn Sie nur wenige Header in Jersey 2.x-Client hinzufügen möchten, können Sie es einfach hinzufügen, wenn die Anfrage wie folgt gesendet wird.

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

hinzuzufügen, was gesagt Pradeep, gibt es auch Header ist (MultivaluedMap < String, Objekte> unter WebTarget.request(), wenn Sie eine Schar von Header haben:

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 
Verwandte Themen