因此,我试图在字段上使用带有Dozer的自定义转换器,该转换器需要从List <A>
转换为List <B>
。我使用了here中所述的“新API”,
提示给推土机正确的映射。因此,最后,XML配置如下所示:
<field map-id="ResolveObjectId">
<a>lista</a>
<b>listb</b>
<a-hint>org.bson.types.ObjectId</a-hint>
<b-hint>SomeDTO</b-hint>
</field>
<mapping map-id="ResolveObjectId" >
<class-a>org.bson.types.ObjectId</class-a>
<class-b>SomeDTO</class-b>
<field custom-converter-id="myCustomConverter">
<a>this</a>
<b>this</b>
</field>
</mapping>
自定义转换器(myCustomConverter)是由Spring容器创建的,因为它对其他bean有一些依赖性。然后将其传递到属性“ customConvertersWithId”中的DozerBeanMapper bean。
所以所有这一切似乎都正常,但是当自定义转换器被调用并返回SomeDTO对象的新实例时,Dozer实际上并不使用该对象。相反,Dozer会创建一个“ SomeDTO”类型的空实例,并将所有字段设置为null,而不是使用转换器中的对象。
当我的转换器使用“旧” API来实现CustomConverter
接口并接受整个列表作为对象时,一切正常。
所以我认为这是我的配置问题还是推土机问题? 我正在使用带有JDK8支持的5.5.1版本来转换LocalDate:Dozer JDK8 support
其他一些Stack溢出问题涉及将List转换为List并提出了我上面介绍的解决方案。可以找到here