我认为它不受支持的原因是因为方法签名中的命名参数最终成为 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 {