我想将 Java POJO 转换为 Map,不使用属性的 JSON 序列化(例如,将日期转换为长字符串或 ISO8601 字符串)。我只是希望字段保持原样。
例如,如果我有一个像这样定义的 POJO:
public class MyPojo {
private Date date;
private String x;
public MyPojo(Date date, String x) {
this.date = date;
this.x = x;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
}
我知道我可以使用Jackson如 this 中所述Stackoverflow问题但结果不是我想要的。例如,如果我这样做:
Map<String, Object> x = new ObjectMapper().convertValue(new MyPojo(new Date(), "x"), new TypeReference<Map<String, Object>>() {});
System.out.println(x);
我得到这个结果:
{date=1528521584984, x=x}
而我只是希望 Map 保留 java.util.Date 实例而不进行序列化。
请注意,我显然希望这项工作适用于嵌套 Pojo,例如:
public class MyPojo {
private MyOtherPojo otherPojo;
...
}
我怎样才能实现这个目标?
最佳答案
首先,从 POJO 到 Map
似乎是一个坏主意。但我想你有理由想要这样做......
简单的方法是创建一个 HashMap
并使用一系列 put
调用来填充它。这将为您提供一个 map ,其中包含与原始 POJO 相同的信息,但未“连接”到它。
如果您希望Map
成为原始POJO的 View ,可以使用第3方库来实现此目的。例如,org.apache.commons.beanutils
具有用于将遵循 JavaBeans 约定的 POJO 包装为 DynaBean
的类。然后,您可以使用 DynaBeanMapDecorator
将其调整为 Map
。
将嵌套 POJO 映射到嵌套映射需要更多工作。 (这与您的要求相矛盾,即您可以将 getData()
的值作为 Date
POJO 而不是 Map
获取!)
关于java - 将 Java POJO 转换为 Map,无需 JSON 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50771224/