【发布时间】:2012-12-22 04:06:59
【问题描述】:
免责声明:Mapping deep properties with intermediate collections in dozer 已在此处提出了相同的问题,但没有可接受的答案(对于我的情况也没有正确的答案)。
所以这个问题。我有一个由 ComplexObject 组成的领域,如下所示
public class ComplexObject {
private Set<AnotherComplexObject> inner;
... //other fields, setters and getters
}
public Class AnotherComplexObject {
private String property;
... //other fields, setters and getters
}
现在,我将 ComplexObject 映射到 Target,其中 Target 有一个 Set<String> 属性。
public class Target {
private Set<String> targetString;
... //other fields, setters and getters
}
我想将每个 ComplexObject inner.property 映射到一个 Target 目标字符串。语义上看起来像的东西(这当然不起作用,属性不是 Set 的成员并且 Dozer 会生成 MappingException):
<mapping>
<class-a>ComplexObject</class-a>
<class-b>Target</class-b>
<field>
<a>inner.property</a>
<b>targetString</b>
</field>
</mapping>
如果我将AnotherComplexObject 的toString 方法修改为
public class AnotherComplexObject {
public String toString(){
return property;
}
}
然后,Dozer 将检测到源 Set 是“类型”AnotherComplexObject,而目标 Set 是 String,并在转换过程中使用 toString 方法。不幸的是,这不是一个很好的解决方案,因为我需要在我的 POJO 中使用一个方法来让 Dozer 进行转换。
起作用的是编写一个自定义转换器,它覆盖转换方法以检查源是否为 Set,然后假设集合中的对象是 AnotherComplexObject 并从此时开始进行转换,但不知何故,我觉得这不是最好的,也不是更多优雅的解决方案。
关于如何解决这个问题的任何其他想法?
【问题讨论】: