3
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());
    }
}

实现这一目标的方法应该是什么?

4

1 回答 1

3

在这种情况下,您可以有两种不同的选择。

1) 使用带有属性映射 B 到 BD 的 ModelMapper 实例来跳过 c

第一个是为这种特殊情况使用 ModelMapper 实例,cB -> BDto映射中添加 PropertyMap 跳过。所以你必须添加它:

ModelMapper mapper = new ModelMapper();
mapper.addMappings(new BMap());

2)创建一个Converter并在A to 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 中使用转换器:

    class BMap extends PropertyMap<B, BDto> {
          @Override
          protected void configure() {
                using(new BToBDto()).map(source).setC(null);
                //Other mappings...
          }
   }
于 2016-12-20T15:18:53.447 回答