项目背景:
后台通过JSONObject形式存入到redis,前台通过hutool方式将jsonstring转换为jsonobject对象使用时报错,错误信息如标题所示。
搜索问题发现有大佬说:
Hutool会使用JSONNull
来表示空值,而SpringBoot默认使用的序列化是Jackson,在接口调用过程中使用了Map,直接传入了Hutool的JSONObject,而该Map存在空值,所以存在JSONNull,最终导致错误。
我的解决方案为不通过hutool工具来转换,也即
JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
使用这个方式转换传输到前台就会报错。我的处理方式是使用fastjson的方式来转换,如下
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(gpString);
问题解决!
具体分析看红色部分!看完源码,hutool转换的时候默认忽略null值,此处我们也可以使用此种方案来处理。如下:(经过验证,以下这种方式不可行,此处暂时做个转换记录)
// false表示不跳过空值
JSONObject json = JSONUtil.parseObj(userA, false);
Console.log(json.toStringPretty())
完!!!