您的位置:首页 > Web前端 > JavaScript

FastJson整形数据反序列化的坑

2019-04-19 01:03 3367 查看
版权声明:阅读优秀源码,宛若一场探索未知的旅行,疑惑处惊奇,优雅处旖旎; 一切都是新奇的,千回百转与大师的心灵触碰,一场跨越时空的对话,涤荡了原有的愚昧,蜕变出更好的自己。 https://blog.csdn.net/FENGQIYUNRAN/article/details/89391373

在开发过程中,遇到了一个json数据反序列化的坑,具体代码如下:

[code]1 String viewValue = "..............."; #这里是json字符串
2 JSONObject viewObject = JSONObject.parseObject(viewValue);
3 JSONObject videoObject = (JSONObject) viewObject.get("video");
4 Integer viewCount = new Integer(0);
5 if(videoObject.get("viewCount") != null) {
6    viewCount = (Integer) videoObject.get("viewCount"); #有时会报出异常
7 }

这里的坑就出现在第6行代码,我这里目标是要获取viewCount的key对应的整形值,经过几次测试也没有发现什么异常。但是当提交给测试被测试同学报出异常了。那么具体原因是什么?直白地说,fastjson在将整形的value值反序列化时,会根据值得具体长度生成不同的类型,一旦值超过Integer型的表达范围就会反序列化成Long; 在Integer以内会反射为Integer。我测试的值都比较按照线上可能的数据范围来测试的,而测试同学会更多覆盖一些边缘情况,于是就反序列化出了Long,但Long是不能强制转化为Integer的。

那么该如何处理?需要经过字符串,再转到Long就不会有什么问题了,代码如下:

[code]if(videoObject.get("viewCount") != null) {
viewCount = Long.valueOf(String.valueOf(videoObject.get("viewCount")));
}

需要说明的是,我这里属于比较新的版本:

[code]       <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>

参考:https://www.jianshu.com/p/108b57bac10e

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: