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...
          }
   }

10-06 09:08