json反序列化坑之类型转换异常

背景

 表中有个feature字段,需要存入一些json格式数据的字符串。页面需要展示去获取该值,进行反序列化时发生了异常。										

场景重现

  • 测试代码:
    测试代码
    代码说明:
  • 向Map<Long,Long>结构的map中存放两个数据,都是Long类型的值。
    图中显示的也是Long
    反序列化时的值,有的还是Long,有的变为Integer类型了。
    图中1的变为了Integer
    但是外层的map类型还是Map<Long,Long>。

问题

问题1:获取不到值

明明存放进去时是Long类型啊,现在取的时候是Integer类型了。很奇怪!
Long类型的获取正常
这里获取为空

  • map里的key变为了Integer类型的1,用Long类型的1来获取肯定获取不到了。

问题2:类型转换异常

这里我们代码改动下,存放的数据增加一种key是Long longKey = Long.valueOf(Integer.MAX_VALUE)+1L;
value = 1L;的情况。
代码

key为long,value为Integer
报错了
解决办法:Long value3 = Long.valueOf(String.valueOf(resultMap.get(longKey)));

总结:

- 阿里fastjson在将整形的value值反序列化时,会根据值得具体长度生成不同的类型,一旦值超过Integer型的表达范围就
会反序列化成Long; 在Integer以内会反射为Integer。
- 还有啥的Double会反射为BigDecimal。
- 其实不用记,每次使用的时候留个心眼,断点看一下是什么类型,注意处理下就好了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值