项目场景:
Controller层 使用Map<String, object> params 接参,使用swaager进行传参,参数类型String
问题描述:
结果报错在mybatisplus的条件构造器里,出现类型转换异常,java.lang.String cannot be cast to java.lang.Integerprivate Wrapper<YhcsPayOrder> getEntityWrapper(Map<String, Object> params) {
String orderNo = (String) params.get("orderNo");
Integer orderType = (Integer) params.get("orderType");
return new EntityWrapper<YhcsPayOrder>()
.like(StringUtils.isNotEmpty(orderNo), "order_no", orderNo)
.eq(orderType != null, "order_type", orderType)
;
}
}
原因分析:
类型转换问题解决方案:
ps:尝试了百度,参考过热门文章的解决方案,没能解决问题,为了应急还写一个条件查询sql语句。
最后解决方法以及解决过程:
private Wrapper<YhcsPayOrder> getEntityWrapper(Map<String, Object> params) {
String orderNo = (String) params.get("orderNo");
// Integer orderType = (Integer) params.get("orderType");
// Integer orderType = Integer.parseInt(params.get("orderType").toString()); // String -> Integer 有值,错误为java.lang.String cannot be cast to java.lang.Integer 无值,空指针异常 java.lang.NullPointerException
// Integer orderType = Integer.valueOf(String.valueOf(params.get("orderType"))); // 报错 空指针移除. 直接搜索Integer转换为String, 将参数转为String,再转为Integer.
// 无值报错:java.lang.NumberFormatException: For input string: "null" 有值,不会报错. 不符合需求.
String orderType = (String)(params.get("orderType");
return new EntityWrapper<YhcsPayOrder>()
.like(StringUtils.isNotEmpty(orderNo), "order_no", orderNo)
.eq(orderType != null, "order_type", orderType)
;
}
}
备用方法:使用mybatis方式写一个条件查询语句也行。
总结
提示:这里对文章进行总结:
1,String类型的传值作为查询条件不影响Integer类型属性(int类型字段);
思考
1,尝试过多种类型转换方式都没有成功?
2,使用mybaits书写的时候,是否可以考虑一下。