使用我的数据模型,它基本上是一棵带有父子节点的树,Dozer 在成功映射它们时遇到问题,因为它将一个字段(使用接口类型作为参数)解释为一个类,并尝试使用构造函数对其进行实例化. 这会导致以下异常;
ERROR [MappingProcessor] - Field mapping error -->
MapId: null
Type: null
Source parent class: com.*.shared.model.Module
Source field name: parent
Source field type: class com.*.shared.model.Datawarehouse
Source field value: com.*.shared.model.Datawarehouse@706ce458
Dest parent class: com.*.shared.model.Module
Dest field name: parent
Dest field type: com.*.shared.model.Model
org.dozer.MappingException: java.lang.NoSuchMethodException: com.*.shared.model.Model.<init>()
这是一个同类映射,虽然 Dozer 正确地将源类上的父字段标识为 Datawarehouse 类型,因为其父类的 Module 类上的 set 方法使用 Model 接口作为其参数,但它似乎正在尝试实例化模型的类型,这当然会失败,因为模型是没有构造函数的接口,而不是数据仓库,如源类字段所示。
我知道使用 bean-factories 来改变标准映射行为,但我很惊讶这将是解决这个问题的唯一方法。在我看来,Dozer 已经拥有它需要的信息,因为它标识了源类类型,并且对我来说不寻常的是,它会尝试实例化由 setter 签名指定的接口,而不是它试图映射的类型。
有什么建议么?