2017-09-12 5 views
0

모든 사람 (남성 및 여성)을 Orika와 동일한 PersonDto에 매핑하고 싶습니다.Orika 매핑 중첩 된 다중 발생 요소

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 
} 

남성 만 테스트해도 괜찮습니까?

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(); 

난 단지 여자로 테스트하면, 확인하고,

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(); 

을하지만 난 망과 여자와 함께 테스트하는 경우가 KO입니다. 정보 배열은 좋은 크기 나는 해결책을 찾을 수 있지만, 그렇지 않은 최고

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(); 

답변

0

이 없습니다. 나는 당신에게 더 좋은 대답을하고 싶습니다. 여기에 해결책을 올리십시오.

나는 두 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 
} 

내 XML 출력 OK 하지만 내 PersonDto 객체가 하나의 두 개체의 instand가 포함되어 있습니다.

<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>