2017-09-26 82 views
0

實體類:ModelMapper匹配策略:標準的引用類型

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 
} 

代碼到實體轉化爲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); 
    } 
} 

輸出:

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) 

我服用2種引用類型名稱和User.java 地址。 在爲用戶創建對象時,我同時傳遞了名稱和地址詳細信息。當我嘗試用戶對象映射到UserDTO名稱細節越來越映射成功,但地址細節沒有得到映射。

任何機構都可以幫助我理解爲什麼它像這樣或我錯過任何東西嗎?

回答

0

With MatchingStrategies.LOOSE一切正常。

寬鬆的匹配策略允許源屬性通過要求層次結構中的最後一個目標屬性相匹配鬆散地匹配到目的地屬性。以下規則適用:

  • 令牌可任何爲了
  • 的最後一個目標屬性名必須所有令牌匹配
  • 最後源屬性名必須匹配至少一個令牌匹配

鬆散匹配策略非常適用於源和目標對象模型,屬性hi非常不相似的特徵。 它可能會導致檢測到更高水平的模糊匹配,但對於衆所周知的對象模型,它可以快速替代定義映射

這樣就需要添加只有一行:



    @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); 
    } 

輸出:

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}