2016-01-16 1 views
0

J'ai essayé de trouver une réponse à cette question dans le Orika documentation mais pas de chance.Comment mapper les propriétés d'un objet dans un mappeur personnalisé Orika?

je les classes suivantes:

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; 
    ... 
} 

.. et de CustomMapper suivants pour cartographier les objets de B à des objets 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()); 
    } 
} 

Dans mon code client j'ai:

B b = new B(5, new A("100392", "100342")); 
BDTO bdto = mapper.map(b, BDTO.class); 

Ma question est, dans BMapper, quelle est la bonne façon d'amener l'AMapper à mapper "a" à "someA"? Pour le dire autrement, quelle est la bonne façon de mapper un à unA dans BMapper? Je soupçonne que cela peut être fait à travers une interface dans l'objet MappingContext.

Répondre

2

J'ai trouvé une réponse après quelques expériences. Pour mapper des objets de propriété dans le mappeur d'objets principal, c'est-à-dire le scénario expliqué ci-dessus, on peut utiliser le membre protégé "mapperFacade" de CustomMapper.

vous pouvez donc faire quelque chose comme ceci:

bdto.setSomeA(super.mapperFacade.map(b.getA(), ADTO.class));