2014-09-27 79 views
4

我正在使用Jackson ObjectMapper將Java Bean轉換爲MapJackson將對象轉換爲映射保留日期類型

但是,它不保留Date對象,而是將其轉換爲Long

這裏是失敗的測試情況下,

@Test 
public void testObjectToMapDate() { 

    User user = new User(); 
    user.setDob(new Date()); 

    ObjectMapper mapper = new ObjectMapper(); 
    Map<String, Object> map = mapper.convertValue(user, Map.class); 
    assertTrue(map.get("dob") instanceof Date); 

} 

有沒有一個簡單的解決方案呢?

+0

@sotirios是對的。閱讀[doc](http://fasterxml.github.io/jackson-databind/javadoc/2.4/com/fasterxml/jackson/databind/ObjectMapper.html)以瞭解更多 – hsluo 2014-09-27 08:27:21

回答

7

傑克遜默認情況下將java.util.Date實例序列化爲數字時間戳。您可以配置傑克遜用文字表述與

mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // it's true by default 

或提供自己的JsonSerializer

但是,當您正在進行轉換時,中間JSON和目標類型Map中絕對沒有任何內容向Jackson表明它應該將其反序列化爲Date對象。如果沒有額外的類型信息,Jackson將使用其默認值將其反序列化(long,doubleStringLinkedHashMap)。

+0

有沒有什麼辦法可以配置自定義解串器匹配ISO時間戳的正則表達式,並在匹配時反序列化爲Date? – Wheezil 2017-07-20 15:12:49