Google云终止了删除时的HTTP 500错误

时间:2013-04-05 15:36:23

标签: google-app-engine internal-server-error google-cloud-endpoints

Google云端点删除时出现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不是更合适吗?

UPDATE:我尝试了返回null,并尝试将该方法设为VOID。但这两个都会产生HTTP响应

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

1 个答案:

答案 0 :(得分:1)

如果您不想要该对象,请不要将其返回。这是最简单的解决方案。我打算向Google Plugin for Eclipse小组建议他们将模板更改为而不是默认返回已删除的对象。

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