mybatis报错:argument type mismatch

完整报错

当出现这个错误的时候先检查数据类型是否匹配,如果没问题的话往下看

nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating
class com.yssz.coursewareLearning.pojo.User with invalid types 
(Integer,String,String,Role,Student,Teacher) or values (9,ljh,$2a$10$m2fWXgedtSI.sZB1Kl2t2.f9j19rni8NYzdukn6NR3r3mkGmSRgo6,1,ROLE_A
DMIN,null). Cause: java.lang.IllegalArgumentException: argument type mismatch
问题定位

构造器不匹配而非参数不匹配

解决方法
  1. 加上无参构造方法,使用lombok的话加上注解@NoArgsConstructor
  2. 用不上有参构造的话就删了吧
问题起因及解析

先说结论:构造器不匹配而非参数不匹配

测接口的时候报的错,虽然说是类型不匹配,查了半天并没有发现,一筹莫展的时候想到了有没有可能是构造器的问题,当时的代码如下

@Data
@AllArgsConstructor
public class User implements UserDetails {

    @Id
    @Alias("uid")
    private Integer id;

    private String username;
}
这个实体类包括的还有其他实体类,且可能为空,由于使用@AllArgsConstructor生成的有参构造器覆盖了无参构造器,mybatis在映射对象的时候加载有参构造进行反射构造对象,这时就会出现问题,因为找不到无参构造方法,在缺少参数的时候就无法创建对象,所以就报错加上@NoArgsConstructor或者不用的话直接给删了。
最后,感觉这个报错方式可以再优化一点,这样很难看出来。
有错误的话欢迎大家指正
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值