杰克逊将对象转换为映射保留日期类型

时间:2014-09-27 05:12:15

标签: java json jackson

我正在使用Jackson ObjectMapper将Java Bean转换为Map

但是,它不会保留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);

}

这有一个简单的解决方案吗?

1 个答案:

答案 0 :(得分:8)

杰克逊默认将java.util.Date个实例序列化为数字时间戳。您可以将Jackson配置为使用

的文本表示
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // it's true by default

或提供您自己的JsonSerializer

但是,当您进行转换时,中间JSON和目标类型Map中绝对没有任何内容可以向Jackson表明它应该将其反序列化为Date对象。如果没有额外的类型信息,Jackson将始终使用其默认值(longdoubleStringLinkedHashMap)对其进行反序列化。