2011-06-24 114 views
4

我是REST的新成員,並且正在開發客戶端以將數據發佈到外部託管服務。即時通訊使用org.reslet.resource.ClientResource創建一個客戶端需要的長度(411) - RESTlet客戶端需要的長度

Representation rep = new JsonRepresentation(json); 
    rep.setMediaType(MediaType.APPLICATION_JSON); 
    rep.setCharacterSet(CharacterSet.UTF_8); 

    ClientResource clientResource = getClientResource(); 
    Representation reply = clientResource.post(rep); 
    return readResponseStream(reply, clientResource); 

但我得到以下錯誤

Exception in thread "main" Length Required (411) - Length Required 
at org.restlet.resource.ClientResource.handle(ClientResource.java:858) 
at org.restlet.resource.ClientResource.post(ClientResource.java:1197) 
at org.mine.client.impl.RestClient.post(RestClient.java:59) 

相同的代碼工作的GET請求

Representation reply = clientResource.get(); 

我m使用reslet api 2.0.8。這似乎是我在classpath中

org.apache.commons.codec.jar org.apache.commons.logging.jar org.apache.httpclient.jar org.apache.httpcore.jar org.json.jar org.restlet.ext.json.jar org.restlet.jar 

任何幫助下面的罐子,將不勝感激在後org.restlet: Posting JSON content against webservice returns HTTP error 411 (length required)

問題。

+1

如果您使用的是Windows,請嘗試運行提琴手同時發出請求。如果您有另一個工作呼叫進行比較,此功能特別有用。 http://www.fiddler2.com/fiddler2/ –

回答

5

問題是GAE不支持HTTP分塊編碼,因此序列化對象無法發送(通過POST或PUT)到GAE服務器。 在Restlet Framework版本2.1 M4中,我們有一個解決方法可用於緩衝HTTP實體以防止塊編碼。要使用它,請調用帶有「true」值的ClientResource#setRequestEntityBuffering(boolean)方法。請注意,GWT版本不需要此解決方法。

當你正在使用的Restlet 2.0.8,我建議你使用的解決方法發表在這裏:http://restlet.tigris.org/issues/show_bug.cgi?id=1219

最好的問候, 蒂埃裏·布瓦洛

+1

同樣出現在Cloudbees上,謝謝你的技巧(https://cloudbees.zendesk.com/entries/20889467-error-411-length-required) – Martin

+0

@Martin這就是因爲Cloudbees是運行AppEngine的Google合作伙伴:https://cloud.google.com/partners/。 哇這個答案是如此具體! AppEngine甚至沒有提及,但它是正確的解決方案! – Chloe

相關問題