java - Jackson 将对象转换为保留日期类型的 map

标签 java json jackson

我正在使用 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 将始终使用其默认值(longdoubleStringLinkedHashMap)对其进行反序列化.

关于java - Jackson 将对象转换为保留日期类型的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26071530/

相关文章:

java - 可读的击键

java - 获取在 TestNG 中调用其配置方法的测试方法

java - 如何使用 Spring RestTemplate 处理传输编码分块 json

java - Jackson 能否以不区分大小写的方式检查重复的属性?

java - 奇怪的 Spring MVC 上下文配置行为

Java 三元运算符 NPE 自动装箱字符串

json - Redis 添加 "\"到 JSON 字符串

java - 让 GsonConverterFactory 解析某些字段?

java - jackson 解析树响应

java - 错误 : Could not write JSON: Class java. util.ArrayList 不是映射的子类型 - Spring 应用程序中序列化为 JSON