2016-01-16 234 views
0

我试图在Orika documentation找到这个问题的答案,但没有运气。如何映射Orika自定义映射器中的对象属性?

我有以下类别:

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中映射到someA的正确方法是什么?我怀疑它可以通过MappingContext对象中的某个接口完成。

回答

2

我经过一番实验后找到了答案。要映射主对象映射器中的属性对象(即上面解释的场景),可以使用CustomMapper的受保护“mapperFacade”成员。

所以,你可以做这样的事情:

bdto.setSomeA(super.mapperFacade.map(b.getA(), ADTO.class)); 
相关问题