在 Google 上返回一个空列表 App Engine 在开发服务器上和部署时的行为不同
Returning an empty list on Google App Engine behaves differently on the dev server and when deployed
我创建了一个 returns 项目列表的端点。当列表为空时,我希望在 JSON 中看到一个空列表,但列表字段却被省略了。这不是开发服务器上发生的事情。
例如:
@ApiMethod(name = "udinic", path = "udinic")
public List<UdinicResponse> getUdinics() {
List<UdinicResponse> list = new ArrayList<>();
UdinicResponse res = new UdinicResponse();
res.bla = "sds";
list.add(res);
return list;
}
static class UdinicResponse {
String bla;
public String getBla() {
return bla;
}
public void setBla(String bla) {
this.bla = bla;
}
}
当我在开发服务器上 运行 时,这是我得到的响应:
{
items: [ ]
}
当它在部署的服务器上时,这就是我得到的:
{
kind: "udinicEndpoint#resourcesItem",
etag: ""3Ms41gaYW9qnDr8JAXr8FIDhu9jVetg""
}
关于如何获得一致的行为有什么想法吗?我更喜欢得到一个空列表而不是省略该字段。
根据文档 [1]:
,预期的行为是将省略空列表
Empty Lists that are returned will arrive as nulls on the client-side.
Remember to check for those.
所以实际问题是开发服务器与生产服务器不一致。作为开发服务器上一致性的解决方法,您可以添加对空列表和 return null 的检查。
return list.isEmpty() ? null : list;
[1] https://cloud.google.com/solutions/mobile/google-cloud-endpoints-for-android/
我创建了一个 returns 项目列表的端点。当列表为空时,我希望在 JSON 中看到一个空列表,但列表字段却被省略了。这不是开发服务器上发生的事情。
例如:
@ApiMethod(name = "udinic", path = "udinic")
public List<UdinicResponse> getUdinics() {
List<UdinicResponse> list = new ArrayList<>();
UdinicResponse res = new UdinicResponse();
res.bla = "sds";
list.add(res);
return list;
}
static class UdinicResponse {
String bla;
public String getBla() {
return bla;
}
public void setBla(String bla) {
this.bla = bla;
}
}
当我在开发服务器上 运行 时,这是我得到的响应:
{
items: [ ]
}
当它在部署的服务器上时,这就是我得到的:
{
kind: "udinicEndpoint#resourcesItem",
etag: ""3Ms41gaYW9qnDr8JAXr8FIDhu9jVetg""
}
关于如何获得一致的行为有什么想法吗?我更喜欢得到一个空列表而不是省略该字段。
根据文档 [1]:
,预期的行为是将省略空列表Empty Lists that are returned will arrive as nulls on the client-side. Remember to check for those.
所以实际问题是开发服务器与生产服务器不一致。作为开发服务器上一致性的解决方法,您可以添加对空列表和 return null 的检查。
return list.isEmpty() ? null : list;
[1] https://cloud.google.com/solutions/mobile/google-cloud-endpoints-for-android/