2016-05-10 7 views
5

Come mappare String to List ed List to String?Stringa di MapStruct per la mappatura degli elenchi

Considerate che abbiamo seguito 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 
} 

In Dozer e Orika, possiamo facilmente mappare con la seguente riga di codice

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

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

Come posso fare lo stesso tipo di mappatura in MapStruct? Dove troverei altri esempi su mapstruct?

risposta

1

ho potuto vedere alcuni esempi qui: https://github.com/mapstruct/mapstruct-examples

Acquista questo modulo per la tua specifica esigenza (Iterable a non Iterable): https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-iterable-to-non-iterable

e un altro qui: http://blog.goyello.com/2015/09/08/dont-get-lost-take-the-map-dto-survival-code/

Non sono sicuro se è possibile mappare il non iterabile a Iterable.

+0

Ha funzionato per una stringa per elencare la mappatura ma voglio mappare l'indirizzo di posta elettronica primario e secondario all'elenco di indirizzi di posta elettronica quando eseguo che getta lo stesso campo non può essere mappato – suresh

6

L'esempio seguente associa elementi dalla lista emailAddress in PeopleTO nelle primaryEmailAddress e secondaryEmailAddress proprietà People.

MapStruct non può mappare direttamente in raccolte, ma consente di implementare metodi che vengono eseguiti dopo una mappatura per completare il processo. Ho utilizzato uno di questi metodi per mappare le proprietà primaryPhone e secondaryPhone di PeopleTO in elementi dell'elenco phones in 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); 
    } 
} 
Problemi correlati