7

为什么 Google Cloud Endpoints 中存在此限制:

Arrays or collections of entity types are not allowed.

对于带有方法的 API:

@ApiMethod(name = "getCollection", path = "getCollection",  httpMethod = HttpMethod.POST)
public ArrayList<MyObject> getCollection(List<MyObject> pMyObjects) {

解决这个问题的最佳方法是什么?谢谢!

4

1 回答 1

7

我认为它不受支持的原因是因为方法签名中的命名参数最终成为 URL 查询参数,并且他们不想用长长的项目列表来污染它。此外,它们仅支持签名中的 Entity 类型的单个对象,因为这会自动成为“请求主体”。您可以在 docs中阅读有关它的信息。

至于解决它,您为“请求主体”创建一个容器实体对象。这样做的好处是 APIs Explorer 将在 GUI 中扩展实体对象的各个部分,并帮助您正确执行 JSON。

这是一个添加名为“patchFieldOps”的 Map 以实现部分更新的示例。您可以根据需要将任意数量的字段放入 Entity 对象中。我认为,如果您嵌入更多用户定义的类型,他们还需要有 @Entity 注释。

@Entity
public class EndpointUpdateRequestBody {
    // Since Google Cloud Endpoints doesn't support HTTP PATCH, we are overloading
    // HTTP PUT to do something similar.
    private Map<String, String> patchFieldsOps;

    public EndpointUpdateRequestBody() {
        patchFieldsOps = new HashMap<String, String>();
    }

    public EndpointUpdateRequestBody(Map<String, String> patchFieldsOps) {
        this.patchFieldsOps = patchFieldsOps;
    }

    public Map<String, String> getPatchFieldsOps() {
        return patchFieldsOps;
    }

    public void setPatchFieldsOps(Map<String, String> patchFieldsOps) {
        this.patchFieldsOps = patchFieldsOps;
    }
}

...

@ApiMethod(
        name = "stuff.update",
        path = "stuff/{id}",
        httpMethod = ApiMethod.HttpMethod.PUT
)
public Group update(
        User apiUser,
        @Named("id") String id,
        @Nullable @Named("name") String name,
        @Nullable @Named("description") String description,
        EndpointUpdateRequestBody requestBody)
        throws OAuthRequestException, InternalServerErrorException, NotFoundException,
        BadRequestException, UnauthorizedException, ConflictException {
于 2013-10-31T23:30:46.733 回答