工作中遇到的坑
最近老遇到一个异常 [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>>() {})
查了下资料,该问题是由于解析器缓存引起。