1

谷歌雲終端HTTP 500錯誤的刪除谷歌雲終端HTTP 500錯誤的刪除

我產生了谷歌雲端點類遊戲我的標準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 

回答

1

如果你不想要的對象,不要返回它。這是最簡單的解決方案。我將建議Google Plugin for Eclipse團隊將其模板更改爲而不是默認返回已刪除的對象。

如果你確實想要刪除的對象,我認爲你正在運行到JDO的延遲加載。您的資產degree正在序列化時加載。但是,由於底層數據存儲對象已被刪除,因此無法訪問它。在刪除之前,您需要明確地訪問該屬性。

+0

如果我反而返回null或者我將方法更改爲VOID,則生成的HTTP響應是「500由於輸入結束而無法映射到Object」的內容我真的只想返回HTTP 200 - 理想情況下沒有內容。 – Kevin 2013-04-08 12:13:20

+0

在此之後,您是否重新生成客戶端庫? – 2013-04-08 17:43:33

+0

我沒有使用客戶端庫 - 我只是使用Fidder調用HTTP DELETE請求 - 我只是寫了服務器端API。 – Kevin 2013-04-08 20:31:50