我尝试使用ModelMapper映射对象树。
我创建了一个例子来说明我的问题:
Sub
包含多个属性。Source
包含Sub
类型的对象和(至少)另一个属性。Destination
包含一系列属性。代码:
@Test
public class TestCase {
ModelMapper modelMapper = new ModelMapper();
class Source {
String value1 = "1.0";
Sub sub = new Sub();
}
class Sub {
String sub1 = "2.0";
String sub2 = "3";
}
class Destination {
float numberOne;
double numberTwo;
int numberThree;
}
TestCase() {
modelMapper.addMappings(new PropertyMap<Sub, Destination>() {
@Override
protected void configure() {
map(source.sub1, destination.numberTwo);
map(source.sub2, destination.numberThree);
}
});
modelMapper.addMappings(new PropertyMap<Source, Destination>() {
@Override
protected void configure() {
map(source.value1, destination.numberOne);
// map(source.sub, destination); // this causes an exception
}
});
}
public void mapSub() { // works
Destination destination = new Destination();
modelMapper.map(new Sub(), destination);
assertEquals(destination.numberTwo, 2d);
assertEquals(destination.numberThree, 3);
}
public void mapSource() { // how to make this work?
Destination destination = new Destination();
modelMapper.map(new Source(), destination);
assertEquals(destination.numberOne, 1f);
assertEquals(destination.numberTwo, 2d);
assertEquals(destination.numberThree, 3);
}
}
我正在寻找一种配置单个ModelMapper实例的方法,以便满足以下约束:
modelMapper
能够将Sub
类型的对象转换为Destination
modelMapper
能够将Source
类型的对象转换为Destination
Sub
中的属性映射仅声明一次不幸的是,行map(source.sub, destination);
似乎没有按预期工作。
我的真实场景包含一个更大的对象树,其中包含更多属性和类型转换。这就是为什么我试图避免冗余映射信息的原因。
是否可以满足约束条件?