您的位置:首页 > 编程语言 > Java开发

java.math.BigDecimal cannot be cast to java.lang.String

2018-01-29 18:13 721 查看
使用mybatis查询数据库的时候,遇到一个问题。需要查询的数据既包含decimal类型、也包含String类型。使用Map< String,String >接收报错。错误提示如下:

java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String


List<Map<String,String>> myUserEveryDecive = myuseService.myUserEveryDecive1(dateTime,commercialCode);
for (Map<String, String> map : myUserEveryDecive) {
String m = map.get("moneys");
System.out.println(m);
}


上述提示:类型转化异常。

二、网上解决方法如下:

【温馨提示】 网上解决方法提示使用

Integer.parseInt(ob.toString());


或者

map.get("moneys").toString();


等方法,测试了都不可以。

三、【分析了一下】既然double类型无法转化成String类型,那么我们借用万能的类型Object来接收。将mybatis的返回值由Map< String,String >改成Mao< String,Object >。网上之所以说可以,是因为它们一开始定义返回的类型是:Map< String,Object >。这点特地出来跟大家说一下

//返回值是:
/*List<Map<String, Object>>*/
List<Map<String, Object>> myUserEveryDecive(Date startDate, Date endDate,
String commercialCode);


2.0 然后由Object类型转化成String类型很简单,toString一下就可以了

List<Map<String,Object>> myUserEveryDecive = myuseService.myUserEveryDecive(dateTime,commercialCode);
for (Map<String, Object> map : myUserEveryDecive) {
String item_name =  map.get("item_name").toString();
if(map.get("moneys")!=null){
Object moneysObject= map.get("moneys");
String moneysString = moneysObject.toString();
returnUseList.add(item_name+"--"+moneysString);
//这是转化成double类型的,如果不请求的,百度一下Object转化成doublie、BigDecimal 类型,很简单的
BigDecimal ret = null;
ret = new BigDecimal(map.get("moneys").toString());
System.out.println(ret);
}else{
returnUseList.add(item_name+"--"+"0");
}
}


自此,那么问题就解决了,希望对你们有帮助。一开始最大的bug就是定义了返回值是Map< String, String >。特地提醒一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis string
相关文章推荐