mybatis 出错:java.lang.NumberFormatException: For input string: “A“

@GetMapping("/generateOldCarModelRanking")
@ApiOperation("老旧车车型排名")
public Result generateOldCarModelRanking(@RequestParam(value = "year")String year,@RequestParam(value = "isCommercial")boolean isCommercial ,@RequestParam(value = "fuelType")String fuelType,@RequestParam(value = "pageNum")int pageNum,@RequestParam(value = "pageSize")int pageSize){
        log.info("老旧车车型排名,isCommercial:{},fuelType:{},pageNum:{},pageSize:{}",isCommercial,fuelType,pageNum,pageSize);
        return vehicleBaseInfoService.generateOldCarModelRanking(year,isCommercial,fuelType,pageNum,pageSize);
}

这是我的接口,注意参数

fuelType 是String类型的

我来测试接口:

然后看见idea报错:

Error querying database.  Cause: java.lang.NumberFormatException: For input string: "A"
Cause: java.lang.NumberFormatException: For input string: "A"

看看我的sql,其中有一句

<if test="fuelType != null and fuelType != ''">
      and vbi.FUEL_TYPE = #{fuelType}
     <if test="fuelType == 'A' and year != null and year != ''">
         and TIMESTAMPDIFF(YEAR,vbi.REGISTER_DATE,'${year}-12-31')+1 &gt; 8
     </if>
     <if test="fuelType == 'B' and year != null and year != ''">
         and TIMESTAMPDIFF(YEAR,vbi.REGISTER_DATE,'${year}-12-31')+1 &gt; 5
     </if>
</if>

 错误原因

我将String类型的fuelType和Char类型的'A'进行了比较。mybatis认为拿一个字符串(String)和一个字符(char)比较,也会报错

解决办法

转成字符串:'A'.toString()

<if test="fuelType != null and fuelType != ''">
    and vbi.FUEL_TYPE = #{fuelType}
    <if test="fuelType == 'A'.toString() and year != null and year != ''">
        and TIMESTAMPDIFF(YEAR,vbi.REGISTER_DATE,'${year}-12-31')+1 &gt; 8
    </if>
    <if test="fuelType == 'B'.toString() and year != null and year != ''">
        and TIMESTAMPDIFF(YEAR,vbi.REGISTER_DATE,'${year}-12-31')+1 &gt; 5
    </if>
</if>

参考:java - mybatis参数格式化异常:NumberFormatException: For input string:"xx" - 呆萌的程序猿 - SegmentFault 思否

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值