2015-09-11 66 views
7

我已經看過How to add Headers on RESTful call using Jersey Client API,但是這是用於Jersey 1.x的。Jersey 2.x:如何在RESTful客戶端添加標題

如何在Jersey 2.21中設置標題值(例如授權令牌)?

這裏是我使用的代碼:

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

這幾乎是同樣的事情在Jersey 2.提示中,查看['Invocation.Builder']的javadoc(https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Invocation.Builder.html) –

+0

@rgettman有一個非常好的答案 - 如果它解決了這個問題,你應該接受它。 –

回答

6

在新澤西2.0+,你可以註冊的ClientRequestFilter自定義實現,可在manipulate the headers請求的客戶端API將發送出去。

您可以通過傳入filter方法的ClientRequestContext參數來操作標題。該getHeaders() method返回MultivaluedMap您可以put您的標題(S)。

您可以register您的定製ClientRequestFilter與您的ClientConfig,然後再致電newClient

config.register(MyAuthTokenClientRequestFilter.class); 
3

如果您只想在Jersey 2.x客戶端添加少量標頭,則可以在發送請求時簡單地添加它,如下所示。

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

要添加到什麼普拉迪普說,這裏還有頭(MultivaluedMap <字符串,WebTarget.request()根據對象>如果你有頭鵝羣:

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