如何将复杂的实体从Android客户端发送到Google AppEngine端点?

时间:2015-05-17 22:33:25

标签: java android json google-app-engine objectify

我的app-endpoint项目有问题。我需要将我的实体对象从android应用程序发送到端点,但我真的找不到它如何正确地执行它。如果重要的话,我的实体对象使用Objectify。

首先尝试

当我尝试将我的实体对象作为@ApiMethod的参数传递时,我收到了关于

的编译错误
Error:Gradle: Execution failed for task ':backend:appengineEndpointsGetClientLibs'.
> There was an error running endpoints command get-client-lib: Parameterized type com.package.NestedData<com.package.AnotherData> not supported.

所以我不能使用泛型类型。

第二次尝试

我也尝试将此对象作为Json对象(字符串参数)发送,但我得到了

GoogleJsonResponseException: 413 FULL head

好的,太长的字符串......是否有一种很好的发送方式?

第三次尝试

我尝试过的最后一件事是序列化对象并发送一个字节数组。它也不适合我。

  • @ApiMethod不能将byte []作为参数。我收到byte []是非法参数类型的消息。
  • Blob参数类型。它不会编译。错误:

      

    错误:Gradle:任务执行失败':后端:appengineEndpointsGetClientLibs'。   运行端点命令get-client-lib:400 Bad Request时出错   {“error”:{“message”:“错误请求”,“代码”:400,“错误”:[{“message”:“api exception”,“debug_info”:“无法解码JSON模式:{u' parameterName':u'resource'}“}]}}

结论

我不知道该怎么做。请帮我弄清楚。谢谢!

示例代码

实体。这是示例结构,但与我的真实对象非常相似。它们必须看起来像这样,因为它们是从另一个json(通过GSON)解析的,所以我无法改变结构。

@Entity
public class Example {
    @Id long id;
    String name;
    NestedData<AnotherData> data;
} 

@Entity
class AnotherData {
    @Id long id;
    String name;
    int value;
}

@Entity
class NestedData<T> {
    List<T> list;
}

1 个答案:

答案 0 :(得分:0)

您需要使用valid parameter type。此问题似乎与this one重复,巧合地显示用户尝试使用com.google.appengine.api.datastore.Blob,就像您一样。