Restlet将JSON POST到Appengine错误

时间:2010-10-29 11:34:45

标签: java google-app-engine rest restlet

我们在GAE服务器和GWT以及Android客户端上有一个使用Restlet的小应用程序。 Restlet为GWT客户端提供GWT序列化回复,为Android客户端提供JSON。

本地和AppEngine生产服务器上的GWT序列化都可以。

Android(JSON)客户端与本地开发服务器通信,一切正常。

Android采取生产AppEngine服务器GETs JSON回复,但POST失败。日志中没有错误或警告。调用服务器上的函数,但传递的参数为null。

这是有问题的代码:

@Post("json")
public void createLocationJSON(Location location) {  // location is always null
    // do something with 'location'
}

2 个答案:

答案 0 :(得分:3)

只是为了让大家都知道:我设法让GAE + Restlet + JSON + GWT在经过多次摆弄之后工作。这个过程非常混乱(让我想起为Win32编程的日子):我只是在更改设置直到它开始工作。

我遇到的问题是:

  1. 它向错误的客户端提供了错误的表示(JSON,XML,GWT)。后来事实证明我必须注意班级内方法的顺序。 WTF ??
  2. 我无法让它在子路径上工作,例如/休息/*。
  3. 由于以下原因,我不打算使用Restlet(暗示作者):

    1. 文档很少,不准确,有时甚至是矛盾的(在文档的不同部分以不同的方式解释)。
    2. 配置不是标准的JAX-RS。我知道他们可以选择将其配置为JAX-RS,但文档中的所有示例都不是基于此。
    3. 从那时起,我切换到Jersey

答案 1 :(得分:1)

您遇到了几个Restlet用户面临的GAE限制。

前一段时间,GAE停止支持接受分块的HTTP实体。我们使用POST和PUT以及原始GAE Servlet重现了这个问题,因此这与Restlet无关。见GAE问题: http://code.google.com/p/googleappengine/issues/detail?id=129

我们发现的唯一解决方法是不对块实体进行处理,这意味着能够提前计算它们的大小。

在刚刚发布的Restlet 2.1 M3版本中,我们在ClientResource上添加了一个简单的“entityBuffering”属性来实现这一点(默认设置为'false')。

我们正在升级“First Application”示例以说明解决方法。我们还必须应对GWT 2.2破坏与之前的GWT 2.1核心API的兼容性,因此Restlet 2.1仅适用于GWT。

此页面提供了添加详细信息: http://wiki.restlet.org/docs_2.1/13-restlet/21-restlet/318-restlet/303-restlet.html

致以最诚挚的问候,

杰罗姆

Restlet~创始人兼技术主管〜http://www.restlet.org

Noelios Technologies~ http://www.noelios.com