2016-01-16 139 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)); 
相關問題