【发布时间】:2019-06-18 12:09:06
【问题描述】:
我正在尝试使用 Jackson ObjectMappper 将我的 Java POJO 转换为 Map。但是,在转换时,日期更改为字符串。
这是我的 POJO:
public class Sample {
@Id
private String id;
private Date date;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
这是我的代码:
@Test
public void testGenMap() {
Sample sample = new Sample();
sample.setId("a");
sample.setDate(new Date());
Map<String, Object> map = generateMap(sample);
System.out.println(map.get("date") instanceof Date); //false
}
private Map<String, Object> generateMap(Sample sample) {
Map<String, Object> map = CommonsContextUtil.getBean(ObjectMapper.class).convertValue(sample,Map.class);
map.values().removeIf(Objects::isNull);
return map;
}
我知道这已经有一个可能的答案here。但是我的 ObjectMapper 已经以相同的方式进行了配置,但仍然无法正常工作。
这是 ObjectMapper Bean:
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return mapper;
}
【问题讨论】:
-
我相信您需要为此目的使用自定义解串器。或者你可以查看这个帖子stackoverflow.com/questions/50171472/…
-
尝试将'Sample.class'传递给映射器对象的'readValue()'方法。
-
仅供参考,非常麻烦的旧日期时间类,例如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle。 -
从这里更好地使用解决方案:stackoverflow.com/questions/6796187/…。 ObjectMapper 丢失了对象类型信息。
标签: java spring-boot jackson objectmapper