微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

modelMapper:无法将ObjectiveDto强制转换为类ObjectiveModel

如何解决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强制转换问题,看来我无法在for循环中迭代列表。

解决方法

真正的“错误”在您所说的“工作正常”的部分。

根据http://modelmapper.org/javadoc/org/modelmapper/ModelMapper.html#map-java.lang.Object-java.lang.reflect.Type-

中的示例

这明确表明map(source,Type) 方法返回一个List,该List具有TypeToken-Javadoc中的String(在您的情况下为ObjectiveDto)的泛型类型(因此List中的对象)。因此,for中的异常是正确的。

分配给List时没有返回编译错误,因为map(Object source,Type destinationType)的泛型签名没有将返回类型绑定到Type参数(当然,由于由于类型擦除,返回的所有内容都是一个列表)。因此,您应该将原始作业更改为:

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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。