【问题标题】:ModelMapper skip a fieldModelMapper 跳过一个字段
【发布时间】:2018-03-02 17:57:28
【问题描述】:

我想在UserDTOUser 之间进行映射,但不包括一个字段,例如city。我该怎么做,因为我认为这种方法会起作用,但它不起作用:

ModelMapper modelMapper = new ModelMapper();

modelMapper.typeMap(UserDTO.class,User.class).addMappings(mp -> {
    mp.skip(User::setCity);
});

【问题讨论】:

  • 当它不起作用时,你能展示这个例子吗?
  • 你解决了吗?
  • @MuhammedOzdogan - 为什么你认为它会解决问题?我也有同样的问题。
  • @SanjeevDhiman 您是否尝试过不使用 lambda 表达式?

标签: modelmapper


【解决方案1】:

由于泛型参数,我们不能使用 lambda 表达式。

ModelMapper modelMapper = new ModelMapper();
modelMapper.addMappings(new PropertyMap<Dto, Source>() {
                @Override
                protected void configure() {
                    skip(destination.getBlessedField());
                }
            });

【讨论】:

    【解决方案2】:

    要使配置生效,需要添加:

    modelMapper.getConfiguration().setAmbiguityIgnored(true);

    例如

    ModelMapper modelMapper = new ModelMapper();
    modelMapper.getConfiguration().setAmbiguityIgnored(true);
    modelMapper.addMappings(clientPropertyMap);
    modelMapper.map(UserDTO, User);
    
    
    PropertyMap<UserDTO, User> clientPropertyMap = new PropertyMap<UserDTO, User>() {
        @Override
        protected void configure() {
            skip(destination.getCity());
        }
    };
    

    【讨论】:

      【解决方案3】:

      要使配置生效,需要添加:
      modelMapper.getConfiguration().setAmbiguityIgnored(true);

      仅当目标字段与多个源字段匹配时才适用。如果源-目标之间存在 1-1 或 0-1 匹配,则跳过目标字段的设置将有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        相关资源
        最近更新 更多