我有一個要求將具有嵌套對象(深)的對象的屬性映射到DTO對象。其實我想用簡單的DTO將複雜的對象賦予甚至嵌套對象的所有屬性。 我試過BeanUtils,但也沒有做深拷貝。所以我正在探索Dozer來實施解決方案。 但即使Dozer正在映射第一級屬性,但不是深層嵌套對象屬性。如何使用Dozer做深層(或嵌套)對象屬性的映射?
這裏是我的課:
public class Child1 {
private String name = "MyName";
private String address = "ABC";
public TestDTO dto = new TestDTO("50", "USA");
public TestDTO getDto() {
return dto;
}
public void setDto(TestDTO dto) {
this.dto = dto;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
public class TestDTO {
public TestDTO(){}
public TestDTO(String age, String country) {
super();
this.age = age;
this.country = country;
}
private String age = "27";
private String country = "Canada";
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
這就是我想要做的緊縮所有TE屬性(甚至嵌套對象TestDTO目標:
public class TestFacade {
public String name ;
public String address;
private String age ;
private String country ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
我的映射文件(我試過機智沒有配置文件也但它沒有工作,所以我添加了映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
<mapping>
<class-a>Child1</class-a>
<class-b>TestFacade</class-b>
</mapping>
<mapping>
<class-a>TestDTO</class-a>
<class-b>TestFacade</class-b>
<field>
<a is-accessible="true">country</a>
<b is-accessible="true">country</b>
</field>
<field>
<a>age</a>
<b is-accessible="true">age</b>
</field>
</mapping>
最後我的測試文件:
public class QuickTest {
public static void main(String[] args) {
Child1 ch = new Child1();
System.out.println("Get" + ch.getDto().getCountry());
List myMappingFiles = new ArrayList();
myMappingFiles.add("dozerMapping.xml");
DozerBeanMapper mapper = new DozerBeanMapper(myMappingFiles);
TestFacade f = mapper.map(ch, TestFacade.class);
System.out.println(ToStringBuilder.reflectionToString(f));
}
}
這裏是輸出:
[email protected][name=MyName,address=ABC,age=<null>,country=<null>]
從嵌套對象年齡和國家的性質不是映射?
這是一個不正確的答案。請參考我的答案 – Bhuvan