FastJson整形数据反序列化的坑

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

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就不会有什么问题了,代码如下:

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

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

       
			com.alibaba
			fastjson
			1.2.47
		

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

你可能感兴趣的:(FastJson整形数据反序列化的坑)