我目前在下列方式使用Java反序列化JSON與傑克遜掙扎:如何優雅地處理Jackson InvalidFormatException?
我想處理和反序列化JSON響應我從web服務背部和轉換的響應與傑克遜的幫助下的POJO。這在大多數情況下都能正常工作,只要我收到的響應包含正確格式的JSON屬性。
然而,由於web服務和交付的數據是超出我的控制,我不能依賴數據總是在正確的格式。
讓我給你舉個例子:
在我的POJO,有一個java.util.Date
場,和JSON響應包含持有物業日期時間字符串。傑克遜將嘗試解析字符串並將其轉換爲Date
。如果日期格式符合ObjectMapper's
dateformat(ObjectMapper.setDateFormat(...)
),則一切正常。如果格式不同,我會得到一個InvalidFormatException
。
現在的問題是,從服務發送的dateformat可能不同。我可以獲得格式化日期,如2014-11-02T00:00:00Z
,但我也可以獲得日期格式,如2014-11
(僅標識一個月而不是整個日期時間)。
我知道,我可以編寫一個自定義的反序列化器,它可以處理這個確切的情況,並正確處理具有不同日期格式的日期字符串。但是,因爲這隻能解決Dates
的問題,但不能解決潛在的其他數據類型問題,所以我正在尋找更一般的方法。
我想什麼是有忽視其中InvalidFormatException
發生的所有情況,並定義默認值(如null
)的可能性(如果我期待有一個雙人牀和接收的字母數字字符串?發生什麼事如)各自的POJO領域。
那將是對我來說真正有價值的,如果任憑一個無效的日期格式返回或任何其他InvalidFormatException
發生,其餘JSON會仍然被反序列化到POJO。
這對Jackson來說有什麼可能嗎?
感謝您閱讀我的問題,直到最後,我會感謝任何指向正確方向的指針。
我想知道的最佳實踐過。 – kai 2015-06-24 17:23:52