2016-05-10 5 views
5

Как сопоставить String для List и List to String?Отображение MapStruct String to List

Рассмотрим мы следующие classess

class People{ 
    private String primaryEmailAddress; 
    private String secondaryEmailAddress; 
    private List<String> phones; 
    //getter and setters 
} 

class PeopleTO{ 
    private List<String> emailAddress; 
    private String primaryPhone; 
    private String secondaryPhone; 
    //getter and setters 
} 

В Dozer и Orika, можно легко сопоставить с помощью следующей строки кода

fields("primaryEmailAddress", "emailAddress[0]") 
fields("secondaryEmailAddress", "emailAddress[1]") 

fields("phones[0]", "primaryPhone") 
fields("phones[1]", "secondaryPhone") 

Как я могу сделать такое же отображение в MapStruct? Где я могу найти больше примеров на mapstruct?

ответ

1

Я видел некоторые примеры здесь: https://github.com/mapstruct/mapstruct-examples

Checkout этот модуль для вашего конкретного требования (Iterable к не-Iterable): https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-iterable-to-non-iterable

и еще один здесь: http://blog.goyello.com/2015/09/08/dont-get-lost-take-the-map-dto-survival-code/

Не уверен, если это можно сопоставить неизменяемый с Iterable.

+0

Он работает для отображения одной строки для отображения, но я хочу нанести основной и дополнительный адрес электронной почты на список адресов электронной почты, когда я делаю то, что он выбрал одно и то же поле, не может быть сопоставлен – suresh

6

В приведенном ниже примере отображает элементы из списка emailAddress в PeopleTO в primaryEmailAddress и secondaryEmailAddress свойств People.

MapStruct не может непосредственно отображать в коллекции, но позволяет реализовать методы, выполняемые после сопоставления для завершения процесса. Я использовал один такой метод для сопоставления и secondaryPhone свойств PeopleTO в элементы списка phones в People.

abstract class Mapper { 
    @Mappings({ 
     @Mapping(target="primaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 1 ? emailAdresses.get(0) : null"), 
     @Mapping(target="secondaryEmailAddress", expression="emailAddress != null && emailAdress.size() >= 2 ? emailAdresses.get(1) : null"), 
     @Mapping(target="phones", ignore=true) 
    }) 
    protected abstract People getPeople(PeopleTO to); 

    @AfterMapping 
    protected void setPhones(PeopleTO to, @MappingTarget People people) { 
     people.setPhones(new List<String>()); 
     people.getPhones().add(to.primaryPhone); 
     people.getPhones().add(to.secondaryPhone); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^