从一个POJO复制变量到另一个POJO

3

我有一个 POJO 'A',其中有超过30个变量。我有另一个 POJO 'B',大多数变量与 'A' 相同。

例如,A 有一个名为 var1 的变量,类型为 LocalDate 列表,而 B 有一个同名变量 var1,但类型为 Long 列表(日期的 long 值)。现在,我从 REST 服务中获取了'B'的响应,而我的老客户仍在使用'A'。我想将响应从B转换为A。由于除了变量 var1 之外的所有其他值都相同,最有效的方法是什么?是否有任何库提供这样的方法?


一个POJO是否是另一个POJO的子集?还是它们有共同的子集? - Scary Wombat
3
最好以示例类代码来表示您的问题,而不是仅描述它。 - Samuel Robert
A的属性是B的子集吗?如果是这样,https://dev59.com/CG035IYBdhLWcg3wYO91会给你答案(如果您至少可以在项目中更改A的代码)。 - Edward Aung
3个回答

2
最好的方法是编写一个映射器方法,将 A 对象映射到 B 对象。这是最安全和推荐的方法。
如果你可以接受代码变得混乱……你可以将 objA 序列化,然后将其反序列化为 objB。确保两个对象中都有所有的非空字段,并准备捕获解析异常。事实上,除非映射到不同名称(别名)(例如具有某些 Jackson 注释),否则字段的名称在两个类中也应该相同。如果字段的名称不完全相同,它们将被舍弃。
B objB = Json.deserialize(JSON.serialize(objA), new TypeReference<B>(){});

1
你可以使用 Gson 完成。
Gson gson = new Gson();
Type type = new TypeToken<YourPOJOClass>(){}.getType();
String data = gson.toJson(workingPOJO);
coppiedPOJO = gson.fromJson(data, type);

0
你可以使用像Dozer这样的映射库来映射具有相同字段的两个类。您可以排除在两个POJO中不同的字段,并自行映射它们。
更多详情请参阅此链接 http://dozer.sourceforge.net/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接