我正在使用Jackson ObjectMapper将Java Bean转换为Map。
ObjectMapper
Map
但是,它不是保留Date对象,而是将其转换为Long。
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配置为使用带有
java.util.Date
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // it's true by default
或提供您自己的JsonSerializer。
JsonSerializer
但是,当您进行转换时,中间JSON和目标类型中绝对没有任何内容Map可向Jackson表示应将其反序列化为Date对象。如果没有额外的类型信息,杰克逊将使用它的默认值总是反序列化(long,double,String,LinkedHashMap)。
long
double
String
LinkedHashMap