我正在使用Eclipse上的GAE开发Android应用程序 在其中一个EndPoint类中,我有一个返回“Bla”类型对象的方法:
public Bla foo()
{
return new Bla();
}
这个“Bla”对象包含一个“Bla2”类型的对象:
public class Bla {
private Bla2 bla = new Bla2();
public Bla2 getBla() {
return bla;
}
public void setBla(Bla2 bla) {
this.bla = bla;
}
}
现在,我的问题是我无法从客户端访问“Bla2”类。 (甚至方法“getBla()”也不存在)
我设法通过在EndPoint类上创建第二个方法来欺骗它,该方法返回一个“Bla2”对象:
public Bla2 foo2()
{
return new Bla2();
}
现在我可以在客户端使用“Bla2”类,但“Bla.getBla()”方法仍然不会退出。有没有正确的方法呢?
答案 0 :(得分:1)
这不是'正确'的方式,但请记住,仅仅因为您使用的是端点,您不必坚持端点为所有实体做事的方式。
和你一样,我正在使用GAE / J和云端点并拥有一个ANdroid客户端。它在客户端和服务器上运行Java都很棒,因为我可以在所有项目之间共享代码。
我正在做的一些实体与正常的“端点方式”进行通信和共享。但是对于其他实体我仍然使用JSON,但只是将它们粘贴在一个字符串中,通过一个通用端点发送它们,然后在另一端反序列化它们,这很容易,因为实体类在共享代码中。
这允许我通过单个端点发送50种不同的实体类型,这使我可以轻松地为这些实体自定义JSON序列化/反序列化。
当然,如果决定添加iOS或Web(除非您使用GWT)客户端,此解决方案会让您遇到麻烦,但这可能对您来说并不重要。
(编辑 - 添加了一些impl。详细信息)
将Java对象(或实体)序列化为JSON非常简单,但细节取决于您使用的JSON库。端点可以在客户端上使用Jackson或GSON。但是对于我自己的JSON,我使用了内置于Android的json.org,并且易于下载并添加到我的GAE项目中。
以下是有人刚刚发布的教程:
http://www.survivingwithandroid.com/2013/10/android-json-tutorial-create-and-parse.html
然后我添加了一个这样的端点:
@ApiMethod(name = "sendData")
public void sendData( @Named("clientId") String clientId, String jsonObject )
(或者包含一个String列表的类,以便您可以在一个请求中发送多个实体。)
并在您的JSON中放入一个元素,告诉服务器JSON应该被序列化为哪个实体。
答案 1 :(得分:0)
尝试在该字段上使用@ApiResourceProperty
。