java - 有没有办法更改默认映射?
问题描述
我想将一个SourceClass
类型映射到一个DestinationClass
类型。
public class SourceClass {
private Integer id;
private String number;
private String username;
private String email;
}
public class DestinationClass {
private Integer id;
private Map<String, Object> number;
private Map<String, Object> username;
private Map<String, Object> email;
}
目前我使用自定义Converter
进行映射,转换String
为Map<String, Object>
.
// this function will new and set a map object
public Map<String, Object> setData(String title, Object value {
Map<String, Object> result = Maps.newHashMap();
result.put("title", title);
result.put("value", value);
return result;
}
// this function will return my custom converter
public Converter<String, Map<String, Object>> myConverter(String title) {
// LocalI18nUtils.getString(String key) input key and get the translation
return ctx -> setData(LocalI18nUtils.getString(title), ctx.getSource());
}
并使用modelMapper.addMappings()
PropertyMap<SourceClass, DestinationClass> mappings = new PropertyMap<SourceClass, DestinationClass>() {
@Override
protected void configure() {
using(myConverter("Number"))).map(source.getNumber()).setNumber(null);
using(myConverter("Username"))).map(source.getUsername()).setUsername(null);
using(myConverter("Email"))).map(source.getEmail()).setEmail(null);
}
}
// source is SourceClass type object
ModelMapper modelMapper = new ModelMapper();
modelMapper.addMappings(mappings);
modelMapper.map(source, DestinationClass.class);
因此,源对象和目标对象应该是:
// source
{
"id": 1,
"number": "mem_0001",
"username": "member0001",
"email": "member001@mail.com"
}
// destination
{
"id": 1,
"number": {
"title": "Number",
"value": "mem_0001"
},
"username": {
"title": "Username",
"value": "member0001"
},
"email": {
"title": "Email",
"value": "member001@mail.com"
}
}
我之前读过这个问题=>如何自定义 ModelMapper
解决方案说明ModelMapper
自定义映射已添加到默认映射中,因此您不需要例如指定id
:
// you don't need to write this statement.
map(source.getId()).setId(null);
所以我在想,有没有办法改变(或覆盖)默认映射,这样我就可以写更少的代码。
也许它看起来像:
ModelMapper modelMapper = new ModelMapper();
// ...
// something will change default mappings to myConverter
// ...
modelMapper.map(source, DestinationClass.class);
感谢您的所有帮助和解答。
解决方案
推荐阅读
- google-calendar-api - 插入“指定时间范围为空”时出现 Google 日历 API 错误
- spring-batch - 如何在 Spring Batch 中定义“java.lang.String”类型的 bean?
- c# - RestSharp 获取 REST 数据但不会反序列化
- python - 我想在我的 txt 文档中获取所有结果并从中创建一个图表
- python - 如果列值大于其他值,如何在python中创建累积和列
- azure - Azure 突触管道事件触发器无法发布
- javascript - 使用 Jquery 分隔 div 中的内容
- django - 创建后 1 个月后需要更新字段的 Celery 任务
- game-maker-studio-2 - 没有墙壁时的敌人与墙壁的碰撞检测
- bash - 如何在第二次出现时提取两个单词之间的文本 - unix shell scripting