如何使用 ModelMapper 映射对象树
How to map an object tree using ModelMapper
我正在尝试使用 ModelMapper 映射对象树。
我创建了一个示例来说明我的问题:
- Class
Sub
包含多个属性。
- Class
Source
包含一个 Sub
类型的对象和(至少)另一个 属性.
- Class
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);
行似乎无法正常工作。
我的真实世界场景包含一个更大的对象树,具有更多的属性和类型转换。这就是我尽量避免冗余映射信息的原因。
是否可以满足约束条件?
我正在尝试使用 ModelMapper 映射对象树。
我创建了一个示例来说明我的问题:
- Class
Sub
包含多个属性。 - Class
Source
包含一个Sub
类型的对象和(至少)另一个 属性. - Class
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);
行似乎无法正常工作。
我的真实世界场景包含一个更大的对象树,具有更多的属性和类型转换。这就是我尽量避免冗余映射信息的原因。
是否可以满足约束条件?