java - modelMapper:ObjectiveDto 无法转换为 ObjectiveModel 类
问题描述
我在映射对象列表时遇到了 modelMapper 问题:
Type listType = new TypeToken<List<ObjectiveDto>>() {}.getType();
List<ObjectiveModel> objectiveModels =
modelMapper.map(objectiveDtos, listType);
在这个阶段它工作正常。我的问题是当我尝试在 for 循环中迭代列表时。
for (ObjectiveModel objectiveModel: objectiveModels) {
objectiveModel.setObjectiveKeyId(utils.generateId(30));
objectiveModel.setProject(projectModel);
}
我收到一条错误消息:
2020-11-09 12:42:42.924 DEBUG 14956 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [java.lang.ClassCastException: class fr.domain.dto.ObjectiveDto cannot be cast to class fr.domain.model.ObjectiveModel (fr.domain.dto.ObjectiveDto and fr.domain.model.ObjectiveModel are in unnamed module of loader 'app')]
由于 modelmapper cast 问题,我似乎无法在 for 循环中迭代列表。
解决方案
真正的“错误”在您所说的“工作正常”部分。
这明确表明该map(source, Type)
方法返回一个具有 TypeToken 的泛型类型(因此是 List 中的对象)的 List - Javadoc 中的 String ,在您的情况下是 ObjectiveDto 。因此,您的异常for
是正确的。
分配给 List 时没有返回编译错误,因为 的泛型签名map(Object source, Type destinationType)
没有将返回类型绑定到Type
参数(当然,也不会出现运行时错误,因为由于类型擦除,所有返回的都是一个 List)。因此,您应该将原来的作业更改为:
Type listType = new TypeToken<List<ObjectiveDto>>() {}.getType();
List<ObjectiveDto> objectiveModels =
modelMapper.map(objectiveDtos, listType);
或者
Type listType = new TypeToken<List<ObjectiveModel>>() {}.getType();
List<ObjectiveModel> objectiveModels =
modelMapper.map(objectiveDtos, listType);
推荐阅读
- javascript - 试图弄清楚为什么我的反应应用程序不起作用
- debugging - CLion 调试器阻止进入 stl 容器函数
- powershell - 创建 powershell 脚本以将自定义单词模板放置在模板文件夹中
- angular - 在 Angular api 调用中自动添加垃圾
- python-3.x - 如何以列表格式更改 Pandas 列值
- mnist - torch.utils.data.DataLoader - 为什么添加维度
- reactjs - react-redux,安装了 thunk 中间件,类组件 - 错误“动作必须是普通对象。相反,实际类型是:'Promise'”调度
- c++ - '候选模板被忽略:无法推断模板参数'与 std::set
- c++ - linux如何在有多个时指定动态库
- django - 获取 Django - MySQLdb._exceptions.OperationalError: (1025, '重命名错误)