2011-06-24 62 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

相关问题