modelMapper:ObjectiveDto 无法转换为 class ObjectiveModel
modelMapper: ObjectiveDto cannot be cast to class 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 转换问题,我似乎无法在 for 循环中迭代列表。
真正的“错误”在您说“工作正常”的部分。
中的例子
这明确表明 map(source, Type)
方法 return 是一个具有 TypeToken 的泛型类型(因此是列表中的对象)的列表 - Javadoc 中的字符串,您的情况中的 ObjectiveDto。因此,您 for
中的异常是正确的。
当您分配给 List 时没有编译错误 return,因为 map(Object source, Type destinationType)
的泛型签名没有将 return 类型绑定到 Type
参数(也不,当然,会不会有运行时错误,因为由于类型擦除,所有 returned 都是一个列表)。因此,您应该将原来的分配更改为:
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);
我在映射对象列表时遇到 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 转换问题,我似乎无法在 for 循环中迭代列表。
真正的“错误”在您说“工作正常”的部分。
中的例子这明确表明 map(source, Type)
方法 return 是一个具有 TypeToken 的泛型类型(因此是列表中的对象)的列表 - Javadoc 中的字符串,您的情况中的 ObjectiveDto。因此,您 for
中的异常是正确的。
当您分配给 List 时没有编译错误 return,因为 map(Object source, Type destinationType)
的泛型签名没有将 return 类型绑定到 Type
参数(也不,当然,会不会有运行时错误,因为由于类型擦除,所有 returned 都是一个列表)。因此,您应该将原来的分配更改为:
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);