【发布时间】:2017-10-06 14:16:02
【问题描述】:
我有两个数据集,让我们考虑从 JAXb 转换器生成的数据 A 和数据 B。检查下面的代码sn-p,
// Data A
public class CompanyA {
private List<EmployeeA> empList;
}
public class EmployeeA{
private List<AddressA> addList;
}
public class AddressA{
private String city;
}
// Data B
public class CompanyB {
private List<EmployeeB> empList;
}
public class EmployeeB{
private List<AddressB> addList;
}
public class AddressB{
private String city;
}
这些是使用 getter [for all] /setter [for non collection fields] 生成的 JaxB 对象(上面的代码中没有提到)。当我尝试使用 Dozer API 进行映射时,只映射了父对象,但在映射集合时会出现空指针异常。
尝试了以下映射方法来解决映射问题,
mapping(CompanyA.class, CompanyB.class)
.fields(field("empList").accessible(true), field("empList").accessible(true));
但上述方法的缺陷在于,如果对象包含嵌套列表对象,那么对于所有带有 accessible(true) 的对象,我必须提及
我可以尝试映射所有集合对象的任何其他方法,而无需在映射配置中提及所有映射场景。
【问题讨论】:
-
如果每个属性都有setter/getter方法,为什么还要将
accessible设置为true? -
@araknoid - 错过了列表部分,更正了问题,因为这些是 JaxB 生成的,导致没有设置器用于收集(如列表等)
-
我们在我的办公室也遇到了这个问题。检查其他人要说什么here。手动创建 set 方法可能比尝试使用 Dozer 找到解决方法更好。因为 Dozer 没有考虑到 JaxB 的收藏问题
-
@Ray - 我们继续以同样的方式生成对象的设置器。