java - 推土机试图将一个类映射到它的接口(interface)

标签 java interface mapping dozer

我的数据模型基本上是一棵有 parent child 的树,Dozer 在将字段(使用接口(interface)类型作为参数)解释为一个类并尝试实例化它时,在成功映射它们时遇到了问题与构造函数。这导致以下异常;

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 接口(interface)作为其参数,看起来试图实例化模型的类型,这当然会失败,因为模型是一个没有构造函数的接口(interface),而不是数据仓库,如源类字段所示。

我知道使用 bean-factories 来改变标准映射行为,但令我惊讶的是这将是解决此问题的唯一方法。在我看来,Dozer 已经拥有它需要的信息,因为它标识了源类类型,而且对我来说不寻常的是,它会尝试实例化由 setter 签名指定的接口(interface),而不是它试图映射的类型。

有什么建议吗?

最佳答案

您可以通过在 dozer xml 配置中使用 dozer a-hint 和 b-hint 标签来解决这个问题。指定哪个类应该 dozer 实例化而不是接口(interface)。

关于java - 推土机试图将一个类映射到它的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17400946/

相关文章:

c# - 聚合以及如何检查我们是否可以对对象求和

interface - 使用 CaSTLe Windsor 3.0 拦截 Startable 设施调用的方法

java - 使用推土机进行集合映射时无限循环

sql - 将多个表连接到桥接表,同时保留两侧数据(包括 NULL)

java - 字符串至少包含一位数字

java - Java 中的 Class<?> 是什么意思?

templates - 模板对象字段强制执行

java - 当用户单击警报按钮时,打开移动浏览器并在 Android 应用程序上显示 URL

javax.el.PropertyNotFoundException : Property 'printIDs' not found on type but this property is commented 异常

java - 映射 Servlet 参数