2012-05-26 56 views
0

我有一個彈簧控制器,其中有多個方法,每個方法都基於頭返回XML或JSON數據。除了在返回JSON數據中存在問題的一種方法之外,所有方法都成功返回數據。我看到的是「500內部服務器錯誤」在日誌中Spring Controller無法返回JSON

這是我的方法看起來像:

@RequestMapping (value="/test", method=RequestMethod.GET, headers ={"Accept=text/xml, application/json"}) 
public @ResponseBody MyObject getMyObject() throws FileNotFoundException, JAXBException { 

    return getMyService().getMyObject(); 
} 

Eclipse控制檯不顯示任何錯誤,的Tomcat只記錄顯示「500內部服務器錯誤「,如果我調試然後getMyService()。getMyObject()具有正確的數據。那麼500錯誤的原因是什麼?爲什麼它對XML請求工作正常,但對JSON不適用?謝謝!

回答

3

問題是我沒有提供MyObject中幾個私有變量的公共getter。

1

顯然,當json序列化失敗時會發生此問題(另請參閱Internal server error on Jackson @ResponseBody)。儘管我還不完全清楚,但爲什麼我們沒有通過Spring獲得例外,這個簡短答案對我來說非常實用:https://stackoverflow.com/a/25011673/4340425

簡而言之:通過手動實例化對象映射器並嘗試序列化對象,您可以獲得顯示問題的異常(通常缺少getter或嘗試序列化一些非原始對象,而沒有指定適當的映射器)。