如何在 Orika 自定义映射器中映射对象属性?
How to map object properties in an Orika custom mapper?
我试图在 Orika documentation 中找到这个问题的答案,但没有成功。
我有以下 类:
public class A {
private String partNumber1;
private String partNumber2;
...
}
public class B {
private Integer shelfNumber;
private A a;
...
}
public class BDTO {
private Integer selfNumber;
private ADTO someA;
...
}
public class ADTO {
private String partNumber;
...
}
.. 和以下 CustomMapper 将 B 的对象映射到对象 BDO
@Component
public class BMapper extends CustomMapper<B, BDTO> {
@Override
public void mapAtoB(B b, BDTO bdto, MappingContext context) {
super.mapAtoB(b, bdto, context);
//??? what to do here ???
}
}
@Component
public class AMapper extends CustomMapper<A, ADTO> {
@Override
public void mapAtoB(A a, ADTO adto, MappingContext context) {
super.mapAtoB(a, adto, context);
adto.setPartNumber(a.getPartNumber1() + a.getPartNumber2());
}
}
在我的客户端代码中我有:
B b = new B(5, new A("100392", "100342"));
BDTO bdto = mapper.map(b, BDTO.class);
我的问题是,在 BMapper 中,让 AMapper 将 "a" 映射到 "someA" 的正确方法是什么?换句话说,在 BMapper 中将 a 映射到 someA 的正确方法是什么?我怀疑它可以通过 MappingContext 对象中的某个接口来完成。
经过一些实验,我找到了答案。要在主要对象映射器中映射 属性 对象,即上面解释的场景,可以使用 CustomMapper 的受保护 "mapperFacade" 成员。
所以你可以这样做:
bdto.setSomeA(super.mapperFacade.map(b.getA(), ADTO.class));
我试图在 Orika documentation 中找到这个问题的答案,但没有成功。
我有以下 类:
public class A {
private String partNumber1;
private String partNumber2;
...
}
public class B {
private Integer shelfNumber;
private A a;
...
}
public class BDTO {
private Integer selfNumber;
private ADTO someA;
...
}
public class ADTO {
private String partNumber;
...
}
.. 和以下 CustomMapper 将 B 的对象映射到对象 BDO
@Component
public class BMapper extends CustomMapper<B, BDTO> {
@Override
public void mapAtoB(B b, BDTO bdto, MappingContext context) {
super.mapAtoB(b, bdto, context);
//??? what to do here ???
}
}
@Component
public class AMapper extends CustomMapper<A, ADTO> {
@Override
public void mapAtoB(A a, ADTO adto, MappingContext context) {
super.mapAtoB(a, adto, context);
adto.setPartNumber(a.getPartNumber1() + a.getPartNumber2());
}
}
在我的客户端代码中我有:
B b = new B(5, new A("100392", "100342"));
BDTO bdto = mapper.map(b, BDTO.class);
我的问题是,在 BMapper 中,让 AMapper 将 "a" 映射到 "someA" 的正确方法是什么?换句话说,在 BMapper 中将 a 映射到 someA 的正确方法是什么?我怀疑它可以通过 MappingContext 对象中的某个接口来完成。
经过一些实验,我找到了答案。要在主要对象映射器中映射 属性 对象,即上面解释的场景,可以使用 CustomMapper 的受保护 "mapperFacade" 成员。
所以你可以这样做:
bdto.setSomeA(super.mapperFacade.map(b.getA(), ADTO.class));