fastjson坑 [cannot be cast to xxx]

工作中遇到的坑

最近老遇到一个异常 [com.alibaba.fastjson.JSONObject cannot be cast to xxx] ,而且是偶发,就单独把数据用fastjson和gson去反复解析,发现并没有任何错误,经过分析,突然发现每次单独去执行出现异常的模块时,并不会出现该异常,当执行了某个操作时,再回来执行出现问题的逻辑,就会出现。

找到问题规律就好办了,去 github fastjson issues 和 google去找类似问题,发现也存在该问题,在issues上没找到解决方法,后来在google搜索到了一个解决办法。

问题:

当先解析一个无data的数据返回时:


BaseResult baseResult = JSON.parseObject(data
                        , new TypeReference<BaseResult>() {})


然后在后面的逻辑上解析一个存在data的数据返回时:


BaseResult<LoginRes> baseResult = JSON.parseObject(data
                        , new TypeReference<BaseResult<LoginRes>>() {})

这个时候就会出现[com.alibaba.fastjson.JSONObject cannot be cast to xxx.LoginRes] 异常。

解决方案:

把无data的数据返回解析代码改为:


BaseResult<Void> baseResult = JSON.parseObject(data
                        , new TypeReference<BaseResult<Void>>() {})

查了下资料,该问题是由于解析器缓存引起。

Github/fastjson

    原文作者:Walkud
    原文地址: https://www.jianshu.com/p/922c06372396
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞