Orika Mapping嵌套的多次出现元素

时间:2017-09-12 10:33:32

标签: java mapping orika

我希望将所有人(男性和女性)与Orika一起映射到同一个PersonDto。

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。 info数组没有好的大小

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

1 个答案:

答案 0 :(得分: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>