2015-06-22 72 views
2

我有一个API端点方法是这样的:如何通过Google Cloud Endpoints收到<ArrayList>?

@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

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

我想知道你是如何创建请求的,如果你可能只是用逗号作为你发送的数组中的单个元素加入字符串。虽然我知道这样做故意听起来很疯狂,但我不认为你这样做,有可能在你的代码下面有一些抽象层做到这一点?

另一种可能性是,您没有为您的Endpoints API使用生成的客户端库(您确实应该,它会完成大量工作,您最终会自行复制),并且您正在生成JSON发送过来?在这种情况下,我可以看到最终发送的请求可能与您的期望有什么不同,将“testArray”中的所有值折叠为逗号分隔列表中的关键字。

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

+0

伟大的答案,让我澄清几点。 1.请求与上面输入的内容完全相同。我简单地用ID1 ID2取代9位用户ID以用于SO目的。我只在后端工作,前端android对我来说非常神奇,所以我不能说出请求中可能发生的任何扼杀。为了进行调试,我的前端工程师通过冗余发送了他的请求。 2.根据客户端库,我相信他们正在使用它。我们已将我们的项目合并到android studio中。 3.我们正在使用最新的SDK。 你能否提出另一个调试步骤? – Japes

+0

如果你不知道系统是如何工作的,你应该有人打开并管理有关这些系统相关问题的stackoverflow线程。发布的JSON对象更像是想要发送的内容,而不是发送的实际有效内容。什么特定的代码在客户端形成请求?在正确制定请求时,我部署了一个API,其代码与您的预期一致。另外,你有没有设法检查原始的HttpServletRequest对象? – Nick

+0

我会喜欢前端开发人员研究这个问题,但是由于我们找到了解决方法,他们太忙了。 (另外,他们只会说日语)。由于我们即将发布并忙于最终测试,因此我还没有查看需求。发布后,我们会进一步研究这个问题并创建一个补丁。那时我会更新这个主题,因为我个人对此非常好奇。感谢您的关注。 – Japes

1

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

+0

似乎更多的工作。我目前的解决方法是将类型更改为简单的字符串。由于请求是用逗号分隔的列表填充ArrayList(0),我只是将列表解析成一个数组(我已经写过这个函数)并继续。我会在时间允许的情况下测试你的方法,如果结果正确的话,选择它是正确的。 – Japes

+0

以及我应该补充说,请求来自相关的Android应用程序。以防万一,这会有所作为。 – Japes

相关问题