推土机映射两个 类 参数计数不匹配
Dozer mapping two classes with mismatched argument counts
我有两颗豆子,一颗有五个属性,一个有四个。如果我只想忽略额外的属性,如何配置映射?
我看到的所有排除示例都对class一个和class两个都进行了论证。
您不需要做任何事情; Dozer 应该开箱即用。
考虑以下两个 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
的 属性,因此它会被忽略。当我们以另一种方式映射(目标到源)时,源中的 field3
为空。
我有两颗豆子,一颗有五个属性,一个有四个。如果我只想忽略额外的属性,如何配置映射?
我看到的所有排除示例都对class一个和class两个都进行了论证。
您不需要做任何事情; Dozer 应该开箱即用。
考虑以下两个 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
的 属性,因此它会被忽略。当我们以另一种方式映射(目标到源)时,源中的 field3
为空。