Dozer Mapper不直接映射

时间:2014-07-30 12:59:46

标签: java reflection dozer

我有一个SourceClass,其参数如下:

class SourceClass{
   public Integer a;
   public Integer b;
}

并且DestinationClass为:

class DestinationClass {
   public Integer a;
   public Integer b;
}

这是我的测试代码:

public static void main(String[] args) {
    Mapper mapper = new DozerBeanMapper();

    SourceClass src= new SourceClass();
    src.a= 1;
    src.b= 2;

    DestinationClass dest = mapper.map(src, DestinationClass.class);

    System.out.println(dest.a  + "  " + dest.b);
}

代码的最后一行显示为 null null ,现在我已尝试通过提供 getter / setter 但是没有工作,我最后通过指定 @Mapping 注释获得输出,给出要映射的变量名称,如@Mappinf(" a"),但是如您所见,我的变量名称相同,可以&# 39; t dozermapper自己做吗?因为here写的是它自动映射相同的命名变量。

1 个答案:

答案 0 :(得分:1)

好的,首先要么将SourceClass变量更改为Strings,要么将src.a和src.b值更改为Integers。

其次,你需要在SourceClass和DestinationClass中都有getter和setter,因为无论变量是公共变量还是私有变量,dozer都会依赖它们。

以下解决方案有效:

public class SourceClass{
private Integer a;
private Integer b;

public Integer getA(){
    return a;
}

public void setA(Integer a){
    this.a = a;
}

public Integer getB()
{
    return b;
}

public void setB(Integer b){
    this.b = b;
}
}

public class DestClass{
    private Integer a;
    private Integer b;

    public Integer getA(){
        return a;
    }

    public void setA(Integer a){
        this.a = a;
    }

    public Integer getB(){
        return b;
    }

    public void setB(Integer b){
        this.b = b;
    }
}

public static void main(String[] args)
    {
        Mapper mapper = new DozerBeanMapper();

        SourceClass src = new SourceClass();
        src.setA(1);
        src.setB(2);

        DestClass dest = mapper.map(src, DestClass.class);

        System.out.println(dest.getA() + "  " + dest.getB());
    }

我希望这会有所帮助。