我有两个bean,一个有五个属性,另一个有四个。如果我只想忽略额外属性,如何配置映射?
我看到的所有排除示例都对第一类和第二类都进行了论证。
答案 0 :(得分:1)
你不应该做任何事情;推土机应该开箱即用。
考虑以下两个bean:
<强> Source.java 强>
public class Source {
private String field1;
private String field2;
private String field3;
// Getters and setters omitted
}
<强> Destination.java 强>
public class Destination {
private String field1;
private String field2;
// Getters and setters omitted
}
您可以在dozer.xml文件中使用以下映射(这将映射两个bean中名称匹配的所有属性):
<mapping>
<class-a>com.example.Source</class-a>
<class-b>com.example.Destination</class-b>
</mapping>
以下单元测试表明映射有两种方式:
@Test
public void sourceToDestination() {
List<String> mappingFiles = new ArrayList<String>();
mappingFiles.add("dozer.xml");
this.beanMapper = new DozerBeanMapper(mappingFiles);
Source source = new Source();
source.setField1("A");
source.setField2("B");
source.setField3("C");
Destination dest = beanMapper.map(source, Destination.class);
assertEquals("A", dest.getField1());
assertEquals("B", dest.getField2());
}
@Test
public void destinationToSource() {
List<String> mappingFiles = new ArrayList<String>();
mappingFiles.add("dozer.xml");
this.beanMapper = new DozerBeanMapper(mappingFiles);
Destination dest = new Destination();
dest.setField1("A");
dest.setField2("B");
Source source = beanMapper.map(dest, Source.class);
assertEquals("A", source.getField1());
assertEquals("B", source.getField2());
assertNull(source.getField3());
}
当我们将Source映射到Destination时,由于Destination没有名为field3
的属性,它将被忽略。当我们映射另一种方式(Destination to Source)时,Source中的field3
为空。