带有List或Array参数的端点API方法

时间:2014-01-27 05:54:47

标签: android google-app-engine google-cloud-endpoints endpoint

我想使用端点API

将对象或列表数组发送到app引擎
@ApiMethod(name = "insertGroupMembers")
public List<GroupMembers> insertGroupMembers(Collection<GroupMembers> members) {
    EntityManager mgr = getEntityManager();
    List<GroupMembers> listMembers = new ArrayList<>(); 
    try {
        for (GroupMembers groupMember : members) {
            mgr.persist(groupMember);
            listMembers.add(groupMember);
        }

    } finally {
        mgr.close();

    return listMembers;

}

但它显示了生成api库时的错误,如下所示: -

描述资源路径位置类型 生成Cloud Endpoints类的API元数据时出现问题:com.google.api.server.spi.config.validation.CollectionResourceException:groupmembersendpoint.com.appbell.tagalone.GroupMembersEndpoint.insertGroupMembers参数(类型java.util.Collection) :非法参数类型(集合类型'java.util.Collection'中的'class com.appbell.tagalone.GroupMembers')。不允许使用数组或实体类型集合。 TagAlone-AppEngine未知的Google App Engine云端点问题标记

2 个答案:

答案 0 :(得分:5)

我不记得我在哪里读它,但是 - 如果我没弄错的话 - CE不允许数组或列表作为方法参数。不要问我为什么。我记得看到的解决方案是将一个对象传递给方法,并将列表作为对象属性之一。

然后你的方法看起来像:

public List<GroupMembers> insertGroupMembers(MembersWrapper membersWrapper) {
  for (GroupMembers groupMember : membersWrapper.members) {
    mgr.persist(groupMember);
    listMembers.add(groupMember);
  }
  …
}

答案 1 :(得分:0)

此外,如果您正在接收Custom VO对象,请确保使用POST注释该方法。 ex @ApiMethod(httpMethod =&#34; POST&#34;,path =&#34; insertGroupMembers&#34;) 我浪费了很多时间,因为从客户端发送的参数结果为空,只是意识到服务器上收到的数据为空。 重新生成客户端库并自动将自定义VO对象作为参数提供!