2017-09-26 1 views
0

Entité Classes:ModelMapper stratégie correspondantes: standard avec les types de référence

class User{ 
    private Name name; 
    private int age; 
    private String email; 
    private Date dob; 
    private Address address; 

    // No Arguments Constructor , All Arguments Constructor , Setters, Getters and toString 
} 


class Name { 
    private String firstName; 
    private String lastName; 

    // No Arguments Constructor , All Arguments Constructor , Setters, Getters and toString 
} 

class Address { 
    private String houseNo; 
    private String street; 
    private String city; 
    private Integer pincode; 

    // No Arguments Constructor , All Arguments Constructor , Setters, Getters and toString 
} 

DTO:

class UserDTO{ 
    private String firstName; 
    private String lastName; 
    private int age; 
    private String email; 
    private Date dob; 
    private String houseNo; 
    private String street; 
    private String city; 
    private Integer pincode; 

    // No Arguments Constructor , All Arguments Constructor , Setters, Getters and toString 
} 

Code pour convertir l'entité à DTO:

public class ReferenceTypePropertiesMapper { 

@Test 
public void shouldPopulateAllSimpleProperties(){ 
    User user = createUser(); 
    ModelMapper modelMapper = new ModelMapper(); 
    UserDTO userDTO = modelMapper.map(user,UserDTO.class); 

    System.out.println("Source : "+ user); 
    System.out.println("Destination : "+ userDTO); 
} 

private User createUser(){ 
    Name name = new Name("Siva", "Prasad"); 
    Address address = new Address("1-93","ABC","HYD",123456); 
    return new User(name, 29, "[email protected]", new Date(), address); 
    } 
} 

Sortie:

Source : User(name=Name(firstName=Siva, lastName=Prasad), age=29, [email protected], dob=Tue Sep 26 14:38:45 IST 2017, address=Address(houseNo=1-93, street=ABC, city=HYD, pincode=123456)) 

Destination : UserDTO(firstName=Siva, lastName=Prasad, age=29, [email protected], dob=Tue Sep 26 14:38:45 IST 2017, houseNo=null, street=null, city=null, pincode=null) 

Je prends 2 types de référence Nom et Adresse dans User.java. Lors de la création d'un objet pour l'utilisateur, je transmets également les détails de nom et d'adresse. Lorsque je tente de la carte utilisateur objet à UserDTO, Nom les détails sont mis en correspondance avec succès se, mais Adresse détails ne sont pas obtenir cartographiées.

Est-ce que n'importe quel corps peut m'aider à comprendre pourquoi ça se passe comme ça ou est-ce qu'il me manque quelque chose?

Répondre

0

Avec MatchingStrategies.LOOSE tout fonctionne bien.

La stratégie de mise en correspondance en vrac permet de propriétés de la source à être plus ou moins adaptés aux propriétés de destination en exigeant que ne la dernière propriété de destination dans une hiérarchie être adaptée. Les règles suivantes:

  • Tokens peuvent être mis en correspondance dans tout ordre
  • Le nom de la propriété de destination doit avoir tous jetons assortis
  • Le nom de la propriété source doit avoir au moins un jeton apparié

La stratégie d'appariement lâche est idéale à utiliser pour les modèles d'objets source et de destination avec une propriété salut des érarchies très dissemblables. Il peut en résulter un niveau plus élevé de correspondance ambiguë détectée, mais pour les modèles objets connus, il peut être une alternative rapide à la définition des correspondances.

De cette façon, il est nécessaire d'ajouter une seule ligne:



    @Test 
    public void shouldPopulateAllSimpleProperties() { 
     User user = createUser(); 
     ModelMapper modelMapper = new ModelMapper(); 
     modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.LOOSE); 
     UserDTO userDTO = modelMapper.map(user, UserDTO.class); 

     System.out.println("Source : " + user); 
     System.out.println("Destination : " + userDTO); 
    } 

Sortie:

Source : User{name=Name{firstName='Siva', lastName='Prasad'}, age=29, email='[email protected]', dob=Wed Oct 18 23:44:25 MSK 2017, address=Address{houseNo='1-93', street='ABC', city='HYD', pincode=123456}} 
Destination : UserDTO{firstName='Siva', lastName='Prasad', age=29, email='[email protected]', dob=Wed Oct 18 23:44:25 MSK 2017, houseNo='1-93', street='ABC', city='HYD', pincode=123456}