2017-09-28 1 views
0

Je souhaite mapper des objets Java imbriqués. Customer.address.houseNumber à userDTO.homeDTO.addressDTO.houseNo.Mapstrtuct: objet imbriqué. Créer un objet cible uniquement si l'élément source n'est pas Null

Attente: Si et seulement si Customer.address.houseNumber est non nul alors créer homeDTO objet sous userDTO. Sinon, ne créez aucun objet cible.

Problème: J'ai utilisé "NullValueCheckStrategy.ALWAYS" dans le mappeur. Mais mapstruct vérifie si address n'est pas nul alors il crée homeDTO. À l'intérieur du address, le houseNumber est NULL. Je voudrais la vérification null jusqu'à la houseNumber (objet feuille/dernier niveau), puis créer les objets cibles.

S'il vous plaît conseiller comment je parvenir

Voici la cartographie que j'utilise.

@Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) 
public interface Customer2UserMapper { 

    @Mapping(source="address.houseNumber", target="homeDTO.addressDTO.houseNo") 
    void mapCustomerHouse(Customer customer, @MappingTarget UserDTO userDTO) ; 

} 

Le code généré est https://github.com/mapstruct/mapstruct/issues/1303

+0

Il y a quelques fautes de frappe (erreur) dans le code que vous trouverez ci-joint, par exemple 'customer.getAddress() =. getHouseNumber()' –

+0

Merci Andrii. Corrigé –

Répondre

0

C'est quelque chose de similaire comme dans mapstruct/mapstruct#879. Actuellement, ce que vous cherchez n'est pas possible.

Une façon de le faire serait une méthode ont @AfterMapping qui définirait revenir à null si le address.houseNumber est null

+0

Merci Filip. Mais @AfterMapping sera un code supplémentaire pour vérifier si src est null, puis définir target to null. J'ai 1000 éléments à mapper, pour chaque élément je ne peux pas faire cette vérification. –

+0

Je sais que ce sera le code d'extraction, mais actuellement c'est la seule façon de résoudre le problème que vous avez. C'est pourquoi je vous ai lié à la question, où vous pouvez commenter et upvote. – Filip