2012-07-19 55 views
3

我想知道是否可以使用Jackson將[Joda DateTime]對象序列化爲ISO8601 String,而無需創建自定義JsonSerializer<DateTime>如何使用Jackson 2.0將DateTime對象序列化爲ISO8601?

當然,這是一個足夠常見的函數,它是建立在庫的某個地方?我能找到的最接近的是SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,但這似乎只適用於Date對象。

編輯:

我發現this classISO8601DateFormat,但是當我嘗試下面的代碼我沒有得到一個字符串ISO8601:

ObjectMapper mapper = new ObjectMapper(); 
mapper.setDateFormat(new ISO8601DateFormat()); 
mapper.writer().writeValueAsString(DateTime.now()); 

貌似傑克遜不把日期和DateTime對象平等。

UPDATE:

我最後寫了ISO8601日期時間字符串自定義序列。

+2

如果你不介意的話,這將是很好,如果你能拼出的答案,自定義序列化需要什麼以及如何有線起來。謝謝! – Patrick 2012-09-05 15:50:08

回答

2

我還沒有嘗試過自己,但它看起來像you should be able to do this

// Set the date format to the desired (in this case, ISO8601) 
objectMapper.getDeserializationConfig().setDateFormat(myDateFormat); 

// or, as of Jackson 1.8, use 
ObjectMapper#withDateFormat(myDateFormat) 

因爲

與1.4版本開始,傑克遜提供了喬達時間數據類型的一些支持:基本上,它的DateTime可以自動序列化/反序列化,類似於java.util.Date的處理方式。

當前的API調用:

.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
+0

現在爲什麼沒有默認的ISO8601 DateFormat? >:| – jabalsad 2012-07-19 13:34:31

+0

另外,我認爲其中的一些方法不再在2.0 API中。看起來你需要使用'ObjectMapper#setDateFormat'。雖然這沒有什麼幫助,因爲我仍然需要製作自己的符合ISO8601的DateFormat。 – jabalsad 2012-07-19 13:35:36

相關問題