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

     使用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 >。特地提醒一下

你可能感兴趣的:(java)