【问题标题】:Length Required (411) - Length Required in a RESTlet client所需长度 (411) - RESTlet 客户端中所需的长度
【发布时间】:2011-06-24 00:34:41
【问题描述】:

我是 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

任何帮助将不胜感激。

【问题讨论】:

  • 如果您使用的是 Windows,请尝试在发出请求时运行 Fiddler。如果您有另一个工作调用来比较它,这将特别有用。 fiddler2.com/fiddler2

标签: java httpclient restlet-2.0


【解决方案1】:

问题在于 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

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

【讨论】:

  • Cloudbees 上也出现了同样的情况,感谢您的技巧 (cloudbees.zendesk.com/entries/…)
  • @Martin 那是因为 Cloudbees 是使用 AppEngine 的 Google 合作伙伴:cloud.google.com/partners。哇这个答案太具体了!甚至没有提到 AppEngine,但它是正确的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 2014-11-15
相关资源
最近更新 更多