诡异!!同样的代码,类型判断的时候Java与Grails得到不一样的结果!!

今天遇到一个诡异的问题,同样的代码在Java程序与Grails程序中得到了不一样的结果。关键代码如下:

    private void scanSubMap(int deep, String key, Map<String, Object> object) {
        // 在这里记录
        ElementItem elementItem = new ElementItem(key, deep);
        elementItemList.add(elementItem);
        String sheetName = key;
        logger.info(String.format("开始扫描处理:%s:", sheetName));
        for (String e : object.keySet()) {
            try {
                Object o = object.get(e);
                logger.info("class name:" + o.getClass().getName());
                sheetName = key + "." + e;
                if (o instanceof JSONObject) {
                    logger.info("JSONObject" + sheetName);
                    Map<String, Object> oo = (Map<String, Object>) o;
                    scanSubMap(deep + 1, sheetName, oo);
                } else {
                    if (o instanceof JSONArray) {
                        logger.info("JSONArray" + sheetName);
                        JSONArray jo = (JSONArray) o;
                        for (int i = 0; i < jo.size(); i++) {
                            Map<String, Object> item = jo.getJSONObject(i);
                            String itemName = String.format("%s[%d]", sheetName, i);
                            scanSubMap(deep, itemName, item);
                        }
                    } else {
                        logger.info("None " + sheetName);
                        int k = key.lastIndexOf('.');
                        String sub = key.substring(0, k);
                        System.out.printf("%s-->%s=%s\n", sub, e, (String) object.get(e));
                        elementItem.getData().put(e, (String) object.get(e));
                    }
                }
            } catch (Exception exception) {
                System.out.printf("%s=%s\n", e, (String) object.get(e));
            }
        }
    }

在java程序中执行的输出为:

21:20:46.956 [main] INFO  cn.edu.cup.base.ElementProvider - 开始处理:液体管道模拟工程...
21:20:46.957 [main] INFO  cn.edu.cup.base.ElementProvider - 开始扫描处理:液体管道模拟工程:
21:20:46.957 [main] INFO  cn.edu.cup.base.ElementProvider - class name:com.alibaba.fastjson.JSONObject
21:20:46.957 [main] INFO  cn.edu.cup.base.ElementProvider - JSONObject液体管道模拟工程.流量
21:20:46.957 [main] INFO  cn.edu.cup.base.ElementProvider - 开始扫描处理:液体管道模拟工程.流量:
21:20:46.957 [main] INFO  cn.edu.cup.base.ElementProvider - class name:java.lang.String
21:20:46.957 [main] INFO  cn.edu.cup.base.ElementProvider - None 液体管道模拟工程.流量.unit

而在Grails程序中的执行结果为:

2021-02-18 21:48:54.512  INFO --- [  restartedMain] cn.edu.cup.base.ElementProvider          : 开始处理:液体管道模拟工程...
2021-02-18 21:48:54.512  INFO --- [  restartedMain] cn.edu.cup.base.ElementProvider          : 开始扫描处理:液体管道模拟工程:
2021-02-18 21:48:54.512  INFO --- [  restartedMain] cn.edu.cup.base.ElementProvider          : class name:java.util.HashMap
2021-02-18 21:48:54.512  INFO --- [  restartedMain] cn.edu.cup.base.ElementProvider          : None 液体管道模拟工程.流量
2021-02-18 21:48:54.527 ERROR --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

哪位大侠能指点一二?

问题解决了!

问题的关键是Grails调用的时候没有加载fastJSON类。于是,就在调用的时候强行调用一下fastJSON就好。代码如下:

        System.out.println(JSON.toJSONString(project.getPump().getHead())); // 这是感悟的
        ElementProvider elementProvider = new ElementProvider()
        elementProvider.scanDataMap(commonProvider.getDataMap())

增加了这一行代码后,相当于加载了JSON对象,于是,类型判断就OK了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值