杰克逊将对象转换为映射保留日期类型 [英] Jackson Convert Object to Map preserving Date type

查看:151
本文介绍了杰克逊将对象转换为映射保留日期类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆