Вам не нужно ничего делать; Dozer должен справиться с этим из коробки.
Рассмотрим следующие два компонента:
Источник.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());
}
Когда мы сопоставляем источник с назначением, поскольку у назначения нет свойства с именем field3
, оно игнорируется. Когда мы сопоставляем другой способ (назначение с источником), field3
в источнике равно нулю.
person
Ian A
schedule
04.10.2016