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将映射源代码。两个=
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());
}
});
没有一个奏效。
我希望有一个通用的解决方案,可以停止模型映射器在目标对象中映射任何嵌套对象的属性。
你可能错过了一些预先存在的配置吗?你的例子对我来说很好。
无论如何,这样的事情大多发生在使用LOOSE
匹配策略时。
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.LOOSE);
您可以通过显式地将匹配策略设置为STANDARD
或STRICT
来修复它。
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STANDARD);
或
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
查看文档,了解有关匹配策略、命名约定、默认配置等的更多信息。
我有两个类。请求DTO和实体。我想将请求DTO映射到实体。在这种情况下,我想手动插入实体属性之一,这意味着属性不在请求DTO中。如何使用模型映射器实现这一点。 但这不起作用,它说它不能将字符串转换为长字符串。我要求解决这个问题,或者采取更好的方法。
一个非常简单的问题,烟熏我的情况下的漏洞。我试图跳过userDTO的setPassword每次当我转换用户- 在ModelMapper的这一行,我得到了NullPointerException- 我知道“源”映射不存在,但我的问题是,既然我要求它根本不设置密码,它为什么还要关心它。 抱歉,我想我缺少ModelMapper的一些基础知识。谢谢你的时间和帮助。 得到ModelMapper的帮助,跳过一
这是我的DTO: 这是我的实体: 我想配置我的ModelMapper将Tag#id映射到TagVolumeDTO#idTag。这可能吗?
但我得到了这个: 我的榜样。 我在一个模型中有两个类: ***数据库中的firstName和lastName为空。 当firstName和lastName为null时,ModelMapper将my ClientDto设置为null。 映射后OrderDto的输出:“OrderDto(ordernumber=123,ordersize=10cm,orderdescription=some order
当我试图使用ModelMapper将嵌套的java对象转换为嵌套的DTO时,我遇到了一个问题。在父DTO对象中,子DTO为null。以下是代码片段。 实体类: DTO的课程: 这是映射器代码: 输出: 输出用户DTO:UserDTO[名称=xyz,地址=null,产品=null] 在这里,我想将用户实体转换为UserDTO-dto。我得到了地址和产品DTO的空值。我在这里到底缺少什么?有人知道吗?