class A { class ADto {
int id; -> int id;
List<B> b; List<BDto> b;
} }
class B { class BDto {
int id; -> int id;
C c; CDto c;
} }
在转换
A -> ADto
时,我想跳过C -> CDto
的映射。我的印象是,只要在
B -> BDto
之间进行转换,以下映射器就可以工作,但事实并非如此。所以下面的映射器在覆盖(A -> ADto)
时没有帮助...class BMap extends PropertyMap<B, BDto> {
@Override
protected void configure() {
skip(destination.getC());
}
}
实现该目标的方法应该是什么?
最佳答案
在这种情况下,您可以有两个不同的选择。
1)将ModelMapper实例与到BD的Property Map B一起使用以跳过c
第一个是在这种特殊情况下使用ModelMapper实例,该实例在c
映射中添加了PropertyMap跳过B -> BDto
的实例。因此,您必须添加它:
ModelMapper mapper = new ModelMapper();
mapper.addMappings(new BMap());
2)创建一个转换器并在A到ADto PropertyMap中使用它
另一个选择是使用转换器,因此,在您的情况下,您应该有一个
Converter
来转换B -> BDto
,然后在A -> ADto
PropertyMap
中使用它: public class BToBDto implements Converter<B, BDto> {
@Override
public BDtoconvert(MappingContext<B, BDto> context) {
B b = context.getSource();
BDto bDto = context.getDestination();
//Skip C progammatically....
return bDto ;
}
}
然后在您的PropertyMap中使用Converter:
class BMap extends PropertyMap<B, BDto> {
@Override
protected void configure() {
using(new BToBDto()).map(source).setC(null);
//Other mappings...
}
}