8

使用我的数据模型,它基本上是一棵带有父子节点的树,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 签名指定的接口,而不是它试图映射的类型。

有什么建议么?

4

1 回答 1

3

你可以通过在 dozer xml 配置中使用 dozer a-hint 和 b-hint 标签来解决这个问题。指定应该使用哪个类推土机而不是接口。

于 2014-07-20T21:37:35.243 回答