【已解决】MapStruct:Ambiguous mapping methods found for mapping collection element to java.lang.Object

     有自己思想,拒绝纯复制黏贴!!!

      有自己思想,拒绝纯复制黏贴!!!

       有自己思想,拒绝纯复制黏贴!!!

       这里说个题外话,现在网上有一种现象让我深恶痛绝,就是很多网友对别人所发的博文不加验证,便进行纯复制转发,我很想知道,转发了之后意义在哪?自己都没有去验证所转发的内容是否有效便进行纯复制转发,你们这是在污染网络环境,每次我遇到问题,网上一搜,搜索引擎前面几页一模一样的答案,而且还不是有效的博文,看着这些千篇一律的东西,真的是让我抓狂!!!小小吐槽一下




----------------------------------------------------------------------------------以下是正文-----------------------------------------------------------------------------------


在这里插入图片描述

       简单说一下MapStruct是什么?
       MapStruct是一个映射框架,专门用来处理类与类之间的属性映射的,比如entity类与DTO类的属性映射。
       我们只需要定义好mapper接口,在编译项目的时候MapStruct就会自动帮我们实现这个映射接口,避免了麻烦复杂的映射实现。
       如需了解更多MapStruct的内容请自行百度,本文只是解决使用Mapstruct时出现的问题。

报错信息如下:
java: Ambiguous mapping methods found for mapping collection element to java.lang.Object: 
	com.tortoise.iot.tenant.rest.product.vo.SpuAttributeVO r2v(com.tortoise.iot.tenant.rest.product.request.SpuAttributeRequest arg0), 
	com.tortoise.iot.product.api.dto.SpuAttributeDTO r2d(com.tortoise.iot.tenant.rest.product.request.SpuAttributeRequest arg0).

自定义的mapper接口如下:
在这里插入图片描述

       详细检查之后发现,虽然我定义好了SpuAttributeRestConverter映射接口,但项目编译后,MapStruct并没有自动帮我实现这个映射接口,即没有生成SpuAttributeRestConverterImpl类。

       一开始,映射接口可以正常自动生成对应的实现类,但当我对原有的entity类、DTO类等里的字段进行修改后,便出现了这个问题,网友说MapStruct框架与Lombok框架同时使用会存在一些bug,其中一个就是我的这种情况,即修改类的字段后重新编译,MapStruct并不会自动生成新的实现类,需要我们把旧的实现类删掉,重新编译才会生成修改字段后对应的那个实现类,然而这个方法并不能解决我的问题。
       在未修改字段之前,是可以自动生成实现类的,说明自定义的映射接口应该没有问题,不过保险起见,我还是检查了一下,确实没发现问题,那么问题估计就出在我修改那些字段上了,果不其然,还真是!

所做的修改如下:
SpuAttributeDTO类 ———— 增加了一个属性private List< SpuAttributeValueDTO > values;
SpuAttributeRequest类 ———— 增加了一个属性private List< SpuAttributeRequest > values;
SpuAttributeVO类 ———— 增加了一个属性private List< SpuAttributeValueVO > values;
… …
仔细一对比,你们就会发现SpuAttributeRequest类新增的属性写错了,本应该是SpuAttributeValueRequest,却粗心写成了SpuAttributeRequest,改过来之后就不报错了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨后天555

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值