美文网首页
com.fasterxml.jackson.databind.e

com.fasterxml.jackson.databind.e

作者: 尘埃里的玄 | 来源:发表于2021-07-01 16:17 被阅读0次

    这个错误看的一开始很迷,为啥无法序列化,我一开始以为JSONObject无法序列化,没有实现Serializable接口,最后后发现实现了的这个接口,奇怪

    @GetMapping("/getList")
    public Objcet getRoute(){
            String body = HttpRequest.post("http://192.168.7.151:9090/plat/auth/oauth/token").form("username", "admin")
                    .form("password", "123").form("validateCode", "0").form("grant_type", "password")
                    .form("client_id", "web").form("client_secret", "123").execute().body();
            System.out.println(body);
            JSONObject jsonObject = new JSONObject(body);
            String access_token = (String)jsonObject.get("access_token");
            System.out.println(access_token);
    
            String body1 = HttpRequest.get("http://192.168.7.219:9000/plat/auth/subsystem/getModule?token=ed3b0701-49af-4e9d-8590-2d9b384ccb5d&projectCode=6000").execute().body();
            System.out.println(body1);
            JSONObject routerListJson = new JSONObject(body1);
            Object data = routerListJson.get("data");
            JSONObject jsonObject1 = new JSONObject(data);
            Object powerInfo = jsonObject1.get("powerInfo");
            JSONArray objects = new JSONArray(powerInfo);
            System.out.println(objects);
    return objects;
    }
    

    问题分析

    Hutool会使用JSONNull来表示空值,而SpringBoot默认使用的序列化是Jackson,在接口调用过程中使用了Map,直接传入了Hutool的JSONObject,而该Map存在空值,所以存在JSONNull,最终导致错误。

    总结

    在使用JSON序列化工具的时候,尽量不要混合使用,即使存在多个JSON工具,也不把一个JSON工具的JSON对象直接用另一个JSON工具来处理,因为每个JSON工具都有自己的对JSON的处理,包括一些优化,如果混着用就会出问题,所以,在使用JSON工具处理JSON的时候不要混着使用多种JSON

    吐槽

    这里吐槽下Hutool,null值处理的时候要小心,非空判断用JSONObject.isNull,不要自行处理

    解决办法:换为 com.alibaba.fastjson.JSONObject;

    
        @GetMapping("/getList")
        public Object getRouterList(){
            //拿到能源监管平台的access token
            StringBuilder builder1 = new StringBuilder(baseThirdUrl);
            String s1 = builder1.append("/plat/auth/oauth/token").toString();
            String body = HttpRequest.post(s1).form("username", "admin")
                    .form("password", "123").form("validateCode", "0").form("grant_type", "password")
                    .form("client_id", "web").form("client_secret", "123").execute().body();
            JSONObject jsonObject = JSONObject.parseObject(body);
            String access_token = (String)jsonObject.get("access_token");
            //拿到可视化大屏项目代码为6000的路由json信息
            StringBuilder builder = new StringBuilder(baseThirdUrl);
            String s = builder.append("/plat/auth/subsystem/getModule?token=").append(access_token).append("&projectCode=6000").toString();
            String body1 = HttpRequest.get(s).execute().body();
            JSONObject jsonObject2 = JSONObject.parseObject(body1);
            Object data = jsonObject2.get("data");
            JSONObject dataJSON= (JSONObject)JSONObject.toJSON(data);
            Object powerInfo = dataJSON.get("powerInfo");
            return powerInfo;
        }
    
    

    相关文章

      网友评论

          本文标题:com.fasterxml.jackson.databind.e

          本文链接:https://www.haomeiwen.com/subject/urnjultx.html