杰克逊将对象转换为映射保留日期类型 [英] Jackson Convert Object to Map preserving Date type
问题描述
我使用Jackson ObjectMapper
将Java Bean转换为 Map
。
I am using Jackson ObjectMapper
to convert a Java Bean to a Map
.
但是,它不保留 Date
对象,而是转换为 Long
。
However, it is not preserving the Date
object, rather it gets converted to 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);
}
这有一个简单的解决方案吗?
Is there a simple solution to this?
推荐答案
默认情况下,Jackson将 java.util.Date
实例序列化为数字时间戳。您可以将Jackson配置为使用文本表示
Jackson, by default, serializes java.util.Date
instances as numeric timestamps. You can configure Jackson to use a textual representation with
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // it's true by default
或提供你自己的 JsonSerializer
。
但是,当您进行转换时,中间JSON和目标类型中绝对没有任何内容, Map
,向Jackson表明它应该将其反序列化为 Date
对象。如果没有额外的类型信息,Jackson将始终使用其默认值( long
, double
,)对其进行反序列化字符串
, LinkedHashMap
)。
However, when you are doing the conversion, there is absolutely nothing in the intermediate JSON and in the target type, Map
, to indicate to Jackson that it should deserialize it as a Date
object. Without extra type information, Jackson will always deserialize it using its defaults (long
, double
, String
, LinkedHashMap
).
这篇关于杰克逊将对象转换为映射保留日期类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!