4

我是 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 后的问题:针对 web 服务发布 JSON 内容返回 HTTP 错误 411(需要长度)

我在类路径中有以下罐子

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

任何帮助将不胜感激。

4

1 回答 1

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

最好的问候,蒂埃里·布瓦洛

于 2011-07-27T13:53:59.157 回答