在dozer中使用中间集合映射深层属性

假设我有以下课程

public class Baz { private List foos = new ArrayList(); } public class Foo { private String string; } public class Target { private List fooStrings = new ArrayList(); } 

是否有任何映射我可以使用,给定一个Baz,将它映射到目标类并获得包含在Baz中的foo中的字符串列表? 以下映射不起作用

  Baz Target  foos.string fooStrings   

因为string不是foos的属性(属于List类型)。 我原以为Dozer会非常聪明,如果遇到深度映射中的集合,并且目标也是一个集合,能够将深层属性名称分解为两个并迭代整个集合以获取子元素集合成员的深度映射。 显然不是。 有没有提出Dozerfunction要求的解决方案?

您可以随时编写自己的CustomConverter 。

因为Dozer无法像你期望的那样处理它,这是有道理的,因为在运行时它没有关于List foos类型信息,并且不能保证列表中的每个Object实际上都是Foo

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

  Baz Target  foos fooStrings      Foo   String    

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

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

  Foo String  string   

进入Dozer GitHub

我认为你可以没有自定义转换器。

覆盖Foo类的toString()方法,如下所示:

 @Override public String toString(){ return this.getString(); //assuming string property has a getter method. if not,write this.string 

现在,下面的映射:

  fully qualified name of Baz(with package name) same for Target  foos fooStrings foo java.lang.String