Length Required(411) - RESTlet客户端中所需的长度

时间:2011-06-24 00:34:41

标签: java httpclient restlet-2.0

我是REST新手,正在开发一个客户端,以便将数据发布到外部托管服务。我正在使用org.reslet.resource.ClientResource来创建一个客户端

    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)

相同的代码适用于获取请求

Representation reply = clientResource.get();

我正在使用reslet api 2.0.8。这似乎是帖子org.restlet: Posting JSON content against webservice returns HTTP error 411 (length required)

中的问题

我在类路径中有以下jar:

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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

祝你好运, 蒂埃里博伊洛