gpt4 book ai didi

java - 将 Java POJO 转换为 Map,无需 JSON 序列化

转载 作者:行者123 更新时间:2023-12-01 19:52:42 27 4
gpt4 key购买 nike

我想将 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;
}
}

我知道我可以使用Jacksonthis 中所述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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com