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 map = mapper.convertValue(user, Map.class); assertTrue(map.get("dob") instanceof Date); } 

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

默认情况下,Jackson将java.util.Date实例序列化为数字时间戳。 您可以将Jackson配置为使用文本表示

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

或者提供自己的JsonSerializer

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