2017-09-12 6 views
0

Je souhaite faire une carte de toutes les personnes (hommes et femmes) au même PersonDto avec Orika.Orika Mappage d'éléments multi-occurrences imbriqués

class Name { 
    private String first; 
    private String last; 
    private String fullName; 
    // getters/setters 
} 

class Womens{ 
    private List<Name> names; 
    // getters/setters 
} 

class Mens{ 
    private List<Name> names; 
    // getters/setters 
} 

class Person { 
    private Mens mens; 
    private Womens womens; 
    // getters/setters 
} 

class PersonDto { 
    private List<Info> info; 
    // getters/setters omitted 
} 

class Info { 
    private String notes; 
    // getters/setters omitted 
} 

Si je fais des tests avec des hommes seulement, est-ce OK?

mapperFactory.classMap(Person.class, PersonDto.class) 
     .field("mens.names{first}", "info[0].notes") 
     .field("mens.names{last}", "info[1].notes") 
     .field("mens.names{fullName}", "info[2].notes") 
     .register(); 

Si je test avec des femmes seulement, est-il OK,

mapperFactory.classMap(Person.class, PersonDto.class) 
     .field("womens.names{first}", "info[0].notes") 
     .field("womens.names{last}", "info[1].notes") 
     .field("womens.names{fullName}", "info[2].notes") 
     .register(); 

mais si je test avec des hommes et des femmes, est-ce KO. tableau d'informations ne pas la bonne taille

mapperFactory.classMap(Person.class, PersonDto.class) 
     .field("mens.names{first}", "info[0].notes") 
     .field("mens.names{last}", "info[1].notes") 
     .field("mens.names{fullName}", "info[2].notes") 
     .field("womens.names{first}", "info[3].notes") 
     .field("womens.names{last}", "info[4].notes") 
     .field("womens.names{fullName}", "info[5].notes") 
     .register(); 

Répondre

0

je trouve une solution mais est-ce pas le meilleur. Je vous avez une meilleure réponse, s'il vous plaît poster ici votre solution.

Je Split à deux classes Infomaton:

@XmlRootElement(name = "notes") 
class InfoMen { 
    private String notes; 
    // getters/setters omitted 
} 

@XmlRootElement(name = "notes") 
class InfoWomen { 
    private String notes; 
    // getters/setters omitted 
} 

@XmlRootElement(name = "persons") 
class PersonDto { 
    private List<InfoMen> infoMen; 
    private List<InfoWomen> infoWomen; 

    @XmlElement(name = "notes") 
    public List<InfoMen> getInfoMen() { 
     return infoMen; 
    } 

    @XmlElement(name = "notes") 
    public List<InfoWomen> getInfoWomen() { 
     return infoWomen; 
    } 
    // setters omitted 
} 

Ma sortie XML est OK mais mon objet PersonDto contient Instand deux objets d'un.

<persons> 
    <notes> 
     <first>Petter</first> 
     <last>Butter</last> 
     <fullName>Petter Butter<fullName> 
    </notes> 
    <notes> 
     <first>Wenddy</first> 
     <last>Window</last> 
     <fullName>Wenddy Window<fullName> 
    </notes> 
</persons>