【问题标题】:Copying variables from one POJO to another将变量从一个 POJO 复制到另一个
【发布时间】:2019-09-06 03:18:15
【问题描述】:

我有一个 POJO 'A',它有 30 多个变量。我有另一个 POJO 'B' 并且大多数变量与 'A' 中的相同。

例如,A 有一个变量 var1 作为 LocalDate 列表,B 有一个同名 var1 但作为 Long 列表(日期的长值)的属性。现在从 REST 服务中,我得到了“B”中的响应,而我的老客户仍在使用“A”。我想将响应从 B 转换为 A。由于除了变量 var1 之外我的所有其他值都相同,将所有其他属性从 var2 复制到 var1 的最有效方法是什么?有没有提供这种方法的库?

【问题讨论】:

  • 一个 POJO 是另一个 POJO 的子集吗?还是它们有共同的子集?
  • 将您的问题表示为示例类代码比描述它更好。
  • A 的属性是 B 的子集?如果是这样,stackoverflow.com/questions/5455014/… 会给你答案(如果你至少可以在你的项目中更改 A 的代码)。

标签: java


【解决方案1】:

最好的方法是编写一个映射器方法,将 A 的对象映射到 B 的对象。这是最安全和推荐的方法。

如果您可以弄脏您的代码.. 您可以序列化 objA,然后将其反序列化为 objB。确保所有不可为空的字段在两个对象中都可用,并准备好捕获解析异常。事实上,两个类中的字段名称也应该相同,除非映射到不同的名称(别名)(例如,使用某种杰克逊注释)。如果字段的名称不完全相同,它们将被删除。

B objB = Json.deserialize(JSON.serialize(objA), new TypeReference<B>(){});

【讨论】:

    【解决方案2】:

    您可以使用 dozer 之类的映射库来映射具有相同字段的两个类。您可以排除两个 POJO 中不同的字段并自己映射它们。

    更多详情请参考此链接http://dozer.sourceforge.net/

    【讨论】:

      【解决方案3】:

      您可以使用Gson 完成

      Gson gson = new Gson();
      Type type = new TypeToken<YourPOJOClass>(){}.getType();
      String data = gson.toJson(workingPOJO);
      coppiedPOJO = gson.fromJson(data, type);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多