如何配置 modelmapper 以跳过目标中的嵌套属性

How to configure modelmapper to skip nested properties in destination

Source{
String one;
String two;
}

Destination{
String one;
Child child;
}

Child{
String two;
}

main() {
ModelMapper modelMapper = new ModelMapper();
// what configurations to set here?
Source source = new Source("one=1", "two=2");
Destination desiredResult = new Destination();
desiredResult.setOne("one=1");
Destination mappedResult = modelmapper.map(source, Destination.class )
assertEquals(mappedResult,  desiredResult );
}

问题是 modelmapper 会映射 source.two => destination.child.two,这是我不想要的。我试过像

这样的方法
1. modelMapper.getConfiguration().setPreferNestedProperties(false);
2. modelMapper.getConfiguration().setAmbiguityIgnored(true);
3. modelMapper.getConfiguration().setImplicitMappingEnabled(false);
4. modelMapper.addMappings(new PropertyMap<Source, Destination>() {
      @Override
      protected void configure() {
        skip(destination.getChild());
        skip(destination.getChild().getTwo());
      }
    });

None 成功了。

我希望有一个通用的解决方案,可以停止模型映射器将任何嵌套对象的属性映射到目标对象中。

您是否可能遗漏了一些预先存在的配置?你的例子对我来说很好用。

反正这种事情多半是在你使用LOOSE匹配策略的时候发生的

modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.LOOSE);

您可以通过将匹配策略显式设置为 STANDARDSTRICT 来修复它。

modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STANDARD);

modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);

查看 docs 以获取有关匹配策略、命名约定、默认配置等的其他信息