如何通过Google Cloud Endpoints获得<arraylist>?

时间:2015-06-22 09:34:51

标签: java arrays json google-app-engine google-cloud-endpoints

我有一个像这样的API端点方法:

@ApiMethod(name = "test")
public TestModel test(@Named("testArray") ArrayList<String> myTest) {
for (String i:myTest){
     log.warning("i=="+i);
}

请求是这样的:

{
"testArray":[
    "ID1",
    "ID2"
]
}

然而,当我检查我的日志(以及我的应用程序中导致的问题)时,我看到了

i=="ID1,ID2"

不是我期望看到的:

 i=="ID1"
 i=="ID2"

作为输出。它将数组的两个元素放入myTest(0)。 如何正确填充数组?

2 个答案:

答案 0 :(得分:2)

此问题似乎不会出现在最新的SDK 1.9.22上。

我想知道您是如何创建请求的,以及您是否可能只是使用逗号作为您发送的数组中的单个元素加入字符串。虽然我知道故意这样做听起来很疯狂,而且我不认为你这样做,你的代码下面的某些抽象层可能会这样做吗?

另一种可能性是你没有为你的Endpoints API使用生成的客户端库(你真的应该,它会做很多工作,你最终会自己复制),而你#&# 39;重新形成原始JSON发送?在这种情况下,我可以看到最终发送的请求可能与您期望的不同,折叠数组中的所有值&#34; testArray&#34;是进入以逗号分隔的列表的关键。

所以,我最好的建议是检查你如何形成请求,如果可能的话,在你的端点方法中get access to the raw request itself查看发送的内容。

答案 1 :(得分:1)

最简单的方法,因为这似乎是一个bug,就是不使用命名参数。创建一个具有列表字段的新请求类,并将其用作未命名(aka资源)参数。