【问题标题】:Jackson Convert Object to Map preserving Date type杰克逊将对象转换为地图保留日期类型
【发布时间】:2014-11-22 04:06:51
【问题描述】:

我正在使用 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);

}

有没有简单的解决办法?

【问题讨论】:

  • @sotirios 是对的。阅读doc 了解更多信息

标签: java json jackson


【解决方案1】:

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)对其进行反序列化。

【讨论】:

  • 有什么方法可以配置自定义反序列化器以匹配 ISO 时间戳的正则表达式,并在匹配时反序列化为日期?
  • 但在这种情况下,它将值转换为字符串。例如:2019-11-14T16:04:35.719+0000
猜你喜欢
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2018-03-13
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
相关资源
最近更新 更多