Dozer:没有默认构造函数的类映射

Seb*_*ebi 9 java dozer

让我们说我想映射以下两个类:

public class A {

    String member;

    public void setMember(String member) { this.member = member }
    public String getMember() { return member }
}

public class B {

    String member;

    public B(String member) { this.member = member }

    public String getMember() { return member }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我想要Dozer进行以下转换时:dozerBeanMapper.map( a, B.class );由于缺少类的默认构造函数,我收到错误B.

解决这个问题的最佳方法是什么?使用自定义转换器?

Str*_*lok 9

如果B类不是您的API并且您无法控制它并且您打算无论如何都要映射成员属性,那么您可以使用自定义bean工厂,它可以将默认值传递给costructor:

<mapping>
  <class-a>com.example.A</class-a>
  <class-b bean-factory="com.example.factories.BFactory">
    com.example.B
  </class-b>
</mapping>
Run Code Online (Sandbox Code Playgroud)

你的工厂将实现org.dozer.BeanFactory接口:

public interface BeanFactory {
  public Object createBean(Object source, Class sourceClass, String targetBeanId);
}
Run Code Online (Sandbox Code Playgroud)