我有一个 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"))的输出,但正如您所见,我的变量名称是相同的,dozermapper 不能自己完成它吗?因为here据记载,它会自动映射相同的命名变量。
最佳答案
好的,首先要么将 SourceClass 变量更改为字符串,要么将 src.a 和 src.b 值更改为整数。
其次,您需要在 SourceClass 和 DestinationClass 中都有 getter 和 setter,因为无论变量是公共(public)的还是私有(private)的,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());
}
我希望这会有所帮助。
关于java - Dozer Mapper 不直接映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037492/