在 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/