如何通过 Google Cloud Endpoints 接收 <ArrayList>?

How do I receive a <ArrayList> with 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) 中。 如何正确填充数组?

最简单的方法是不使用命名参数,因为这看起来像是一个错误。创建一个具有列表字段的新请求 class,并将其用作未命名(也称为资源)参数。

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

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

另一种可能性是您没有为您的端点使用生成的客户端库 API(您确实应该这样做,它做了很多您最终会自己复制的工作),并且你正在形成原始 JSON 发送过来?在那种情况下,我可以看到最终发送的请求可能与您期望的不同,将数组中的所有值折叠起来 "testArray" 是逗号分隔列表的键。

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