Java 有没有办法更改默认映射?
我想将Java 有没有办法更改默认映射?,java,modelmapper,Java,Modelmapper,我想将SourceClass类型映射到DestinationClass类型 公共类SourceClass{ 私有整数id; 私有字符串编号; 私有字符串用户名; 私人字符串电子邮件; } 公共类DestinationClass{ 私有整数id; 私人地图号码; 私有地图用户名; 私人地图电邮; } 目前,我使用一个自定义的转换器来进行映射,将字符串转换为映射 //此函数将新建并设置映射对象 公共地图集数据(字符串标题、对象值){ Map result=Maps.newHashMap(); 结
SourceClass
类型映射到DestinationClass
类型
公共类SourceClass{
私有整数id;
私有字符串编号;
私有字符串用户名;
私人字符串电子邮件;
}
公共类DestinationClass{
私有整数id;
私人地图号码;
私有地图用户名;
私人地图电邮;
}
目前,我使用一个自定义的转换器
来进行映射,将字符串
转换为映射
//此函数将新建并设置映射对象
公共地图集数据(字符串标题、对象值){
Map result=Maps.newHashMap();
结果.付诸表决(“标题”,标题);
结果。投入(“价值”,价值);
返回结果;
}
//此函数将返回我的自定义转换器
公共转换器myConverter(字符串标题){
//LocalI18nUtils.getString(字符串键)输入键并获取翻译
返回ctx->setData(LocalI18nUtils.getString(title),ctx.getSource();
}
并使用modelMapper.addMappings()
PropertyMap映射=新的PropertyMap(){
@凌驾
受保护的void configure(){
使用(myConverter(“Number”)).map(source.getNumber()).setNumber(null);
使用(myConverter(“Username”)).map(source.getUsername()).setUsername(null);
使用(myConverter(“Email”)).map(source.getEmail()).setEmail(null);
}
}
//源是SourceClass类型对象
ModelMapper ModelMapper=新的ModelMapper();
addMappings(映射);
modelMapper.map(源,DestinationClass.class);
因此,源对象和目标对象应该是:
// source
{
"id": 1,
"number": "mem_0001",
"username": "member0001",
"email": "member001@mail.com"
}
我以前读过这个问题=>
解决方案说明:将ModelMapper
自定义映射添加到默认映射中,因此您无需指定id
:
//您不需要编写此语句。
map(source.getId()).setId(null);
所以我在想,是否有任何方法可以更改(或覆盖)默认映射,以便编写更少的代码
也许它看起来像:
ModelMapper ModelMapper=newmodelmapper();
// ...
//某些内容将更改myConverter的默认映射
// ...
modelMapper.map(源,DestinationClass.class);
感谢您提供的帮助和答案。主题外,但为什么您希望为类变量从一个字符串转到另一个对象,并丢失该类型信息?因为有些输入是“123.456”(字符串),另一些是123.456(数字),我不知道输入类型。所以我声明输出类变量是Object。但在这个问题中,您可以将Object更改为String。
// destination
{
"id": 1,
"number": {
"title": "Number",
"value": "mem_0001"
},
"username": {
"title": "Username",
"value": "member0001"
},
"email": {
"title": "Email",
"value": "member001@mail.com"
}
}