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
答案 0 :(得分:1)
如果您不想要该对象,请不要将其返回。这是最简单的解决方案。我打算向Google Plugin for Eclipse小组建议他们将模板更改为而不是默认返回已删除的对象。
如果你确实想要删除的对象,我认为你正在运行JDO的延迟加载。您的属性degree
正在序列化时加载。但是,由于基础数据存储区对象已被删除,因此无法访问它。您需要在删除属性之前显式访问该属性。