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

标签 java

我想将 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/

相关文章:

java - 如何创建一个循环,将数据从数组插入 2 个堆栈,但在 7 次迭代后停止?

java - 为什么java安全管理器不是强制性的?

java - Visual Studio Code 中的 JUnit

java - 如何根据特定键的值 null 删除 JSON 数组中的 JSON 对象?

java - Aspose cells java,如何从表/ListObject创建图像

java - MVP 与 CDI;避免循环依赖

java - 通过 Java 程序使用选择器从 cloudant DB 获取数据时出现异常

java - Java 8 流上的多个 .sorted(...) 调用

java - HotSpot JIT 内联策略 : top-down or down-top

java - 有人可以帮我理解以下代码中的服务器如何在java中工作吗