推土机深度映射将设置为Set

免责声明:这里已经提出了同样的问题。 在dozer中使用中间集合映射深层属性 ,但它没有被接受的答案(对我的案例没有正确的答案)。

所以问题。 我有一个由ComplexObject组成的领域,如下所示

public class ComplexObject { private Set inner; ... //other fields, setters and getters } public Class AnotherComplexObject { private String property; ... //other fields, setters and getters } 

现在,我将ComplexObject映射到Target ,其中Target具有Set属性。

 public class Target { private Set targetString; ... //other fields, setters and getters } 

我想将每个ComplexObject inner.property映射到一个Target targetString。 在语义上看起来像的东西(当然,这不起作用,属性不是Set和Dozer的成员生成MappingException):

  ComplexObject Target  inner.property targetString   

如果我修改AnotherComplexObjecttoString方法,我可以实现我的目标

 public class AnotherComplexObject { public String toString(){ return property; } } 

然后,Dozer将检测源Set是“type”AnotherComplexObject,而目标Set是String,并将在转换期间使用方法toString。 不幸的是,这不是一个解决方案,因为我需要在我的POJO中使用一个方法让Dozer进行转换。

编写自定义转换器是什么工作,它会覆盖convert方法以检查source是否为Set,然后假设集合中的对象是AnotherComplexObject并且从这一点开始进行转换但不知何故我觉得这不是最好也不是更多优雅的解决方
关于如何解决这个问题的任何其他想法?

也许我的回答对你有用:

我想,你可以编写这样的映射

  Baz Target  foos fooStrings      Foo   String    

并实现CustomFooConverter以获取foo的字符串字段并将其作为String返回。

我认为您可以发布function请求以支持映射到基元

  Foo String  string   

进入Dozer GitHub