1

删除时谷歌云端点 HTTP 500 错误

我生成了一个 Google Cloud Endpoint 类,它让我使用标准 CRUD 方法,包括删除方法:

public Member removeMember(@Named("id") Long id) {
    PersistenceManager mgr = getPersistenceManager();
    Member member = null;
    try {
        member = mgr.getObjectById(Member.class, id);
        mgr.deletePersistent(member);
    } finally {
        mgr.close();
    }
    return member;
}

但是,当我调用 DELETE 时,会返回 HTTP 500 错误:

HTTP ERROR 500

Problem accessing /_ah/spi/Members.removeMember. Reason:

com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: Cannot read fields from a deleted object (through reference chain: com.mylodge.contracts.masonry.Member[\"degree\"])

如何避免此 HTTP 500 错误?

旁白:对我来说,无论如何返回已删除的对象似乎是不合逻辑的。HTTP 200 OK 不是更合适吗?

更新:我尝试返回 null,并尝试将方法设为 VOID。但是这两个都会产生一个 HTTP 响应

500 No content to map to Object due to end of input
4

1 回答 1

1

如果您不想要该对象,请不要返回它。这是这里最简单的解决方案。我将建议 Google Plugin for Eclipse 团队将模板更改为默认情况下返回已删除的对象。

如果您确实想要删除的对象,我认为您遇到了 JDO 的延迟加载。您的属性degree正在序列化时加载。但是,由于底层数据存储对象已被删除,因此无法访问它。您需要在属性被删除之前显式访问它。

于 2013-04-05T18:17:16.937 回答