2016-05-10 21 views
5

Jak przypisać ciąg do listy i listy?MapStruct Odwzorowanie łańcucha znaków do listy

Rozważmy mamy następujące 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 
} 

W spycharek i Orika, możemy łatwo mapę z poniższej linii kodu

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

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

Jak mogę zrobić tego samego rodzaju odwzorowania w MapStruct? Gdzie znajdę więcej przykładów na mapstruct?

Odpowiedz

1

Widziałem kilka przykładów tutaj: https://github.com/mapstruct/mapstruct-examples

Checkout to moduł dla konkretnego wymogu (iterable do nieprzestrzegania iterable): https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-iterable-to-non-iterable

a drugi tutaj: http://blog.goyello.com/2015/09/08/dont-get-lost-take-the-map-dto-survival-code/

Nie wiem, czy to możliwe jest odwzorowanie nieodwracalnego na Iterable.

+0

Przerobiono na jeden ciąg, aby wyświetlić mapowanie, ale chcę odwzorować główny i wtórny adres e-mail na listę adresów e-mail, gdy wykonuję to, co powoduje, że to samo pole nie może zostać odwzorowane – suresh

6

Poniższy przykład mapy elementy na liście w PeopleTOemailAddress karne primaryEmailAddress i secondaryEmailAddress właściwości People.

MapStruct nie może bezpośrednio mapować do kolekcji, ale pozwala implementować metody, które są uruchamiane po mapowaniu w celu ukończenia procesu. Użyłem jednej z takich metod mapowania właściwości primaryPhone i secondaryPhone na elementy listy phones w 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); 
    } 
}