2011-07-21 20 views
3

我試圖採取任意一組HTTP標頭並將其轉儲到WebResource實例中。該WebResource接口允許一個與查詢參數做到這一點然而,因爲它同時提供澤西島REST:從地圖導入到WebResource實例

 webResource.queryParam(key, value) 

 webResource.queryParams(MultivaluedMap<String, String> queryMap) 

的API,不允許在同一需做頭。只有一個函數,

  webResource.header(key, value) 

它允許一個輸入的HTTP報頭中的鍵 - 值對,但沒有功能

webResource.headers(MultivaluedMap<String, String> headersMap) 

爲了解決這個問題,我試圖檢索來自助洗劑WebResource並迭代它,逐個添加標頭

 WebResource.Builder builder = webResource.getRequestBuilder(); 
    for(Map.Entry<String, String> headersMapEntry : headersMap.entrySet()){ 
     builder = builder.header(
         headersMapEntry.getKey(), headersMapEntry.getValue()); 
    } 

但它似乎並沒有解決我的問題。

有沒有人有一個想法如何我可以做一個與澤西的解決方法,以便我可以轉儲任何地圖到我的WebResource的標題?

謝謝, 大衛

+0

如何迭代地圖並單獨設置標題不能解決問題? –

+0

嘿克里斯托弗,你的問題正是我爲什麼這麼難過。我使用上面的代碼或「webResource.getRequestBuilder()。header(key,value)」手動迭代;「並且無論它是否正確設置標題(我檢查在Wireshark上發送的傳出數據包) 澤西島源代碼中的getRequestBuilder()僅僅是「返回新的Builder()」,這使得人們懷疑它的做法,但是如果你檢查所有返回Builder(cookie(),entity,...)的函數,它們也使用getRequestBuilder()。 –

回答

5

原來,圍繞它的唯一方法是首先提取使用getRequestBuilder(從webResource的requestBuilder),然後用requestBuilder建立和執行請求的其餘部分。

+0

我不知道這是一個錯誤?因爲,爲什麼要這樣做呢? –

+0

沒有線索。自從很長一段時間以來一直沒有用過。雖然我記得它是一個非常驚喜。很想回去再看一遍。 –

0

因爲如果你檢索RequestBuilder或PartialRequestBuilder你可以不火的實際要求,你必須檢索:

WebResource.Builder builder = webResource.getRequestBuilder(); 

WebResource.Builder有GET,POST等:

response = builder.post(ClientResponse.class, body);