我正在使用 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);
}
有没有简单的解决办法?
最佳答案
默认情况下,Jackson 将 java.util.Date
实例序列化为数字时间戳。您可以将 Jackson 配置为使用文本表示
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // it's true by default
或提供您自己的JsonSerializer
。
但是,当您进行转换时,中间 JSON 和目标类型 Map
中绝对没有任何内容向 Jackson 指示它应该将其反序列化为 Date
对象。如果没有额外的类型信息,Jackson 将始终使用其默认值(long
、double
、String
、LinkedHashMap
)对其进行反序列化.
关于java - Jackson 将对象转换为保留日期类型的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26071530/