JSON序列化导致Long类型被搞成Integer经典巨坑
一、背景
最近遇到一个错误,就是某个字段肯定是Long类型的,通过Map<String,Object>方式转成JSON字符串,然后存到了DB的某个字段里。
为了Json存储字,然后反序列化为Map(不是自定义的常规对象)
比如某二方为了提供通用的接口能力,将Map<String,Object>的数据通过JSON序列化方式缓存然后JSON反序列化拿到Map。
等情况。
用的时候就通过Key获取对象之后直接强转Long,然后类型转换异常。
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
二、上代码
@Test(expected = ClassCastException.class)public void testJson() {String id = "id";String name = "name";Long idValue = 3000L;Map<String, Object> data = new HashMap<>(2);data.put(id, idValue);data.put(name, "张三");Assert.assertEquals(idValue, (Long) data.get(id));String jsonString = JSON.toJSONString(data);// 反序列化时Long被转为了IntegerMap map = JSON.parseObject(jsonString, Map.class);Object idObj = map.get(id);Assert.assertTrue(idObj instanceof Integer);Assert.assertEquals(idValue, (Long) idObj);}
没用通过JSON序列化,虽然类型为Object,但是实际的类型为Long。
序列化为Json时后,Josn串是没有 Long类型的,而且反转回来也是Object接收,如果数字小于Interger的最大值,给转成了Integer!
三、方案
参见我的 另外一篇文章 JSON 反序列化 Long 变 Integer 或 Double 问题_明明如月的技术博客-CSDN博客
四、思考
总之开发中尽量不要乱用一些对象属性转换工具,导致属性漏掉或者转错。
不要滥用Map或者JSONObject来传递参数。
如果是含Object类型JSON序列化要特别小心上述问题!!
如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。
另外欢迎加入我的知识星球,知识星球ID:15165241 一起交流学习。
https://t.zsxq.com/Z3bAiea 申请时标注来自CSDN。‘
JSON序列化导致Long类型被搞成Integer经典巨坑相关推荐
- Net深入实战系列—JSON序列化那点事儿
序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...
- Java序列化——JDK序列化与Json序列化
Java原生序列化 Java原生序列化我们可能会了解的比较多,Java类通过实现Serializable接口来实现该类对象的序列化,这个接口非常特殊,没有任何方法,只起标识作用.Java序列化保留了对 ...
- ue4 unreal4 json序列化工具 数据转成字符串等
首先说一个也能序列化的插件 VaRest 这个能序列化能发请求,但是序列化这块不太好用,可能是我不怎么会用吧... ------------------------------------------ ...
- 解决Python自带的json序列化工具不能序列化datetime类型数据问题
解决Python自带的json序列化工具不能序列化datetime类型数据问题 参考文章: (1)解决Python自带的json序列化工具不能序列化datetime类型数据问题 (2)https:// ...
- Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化...
Object of type 'ListSerializer' is not JSON serializable "listserializer"类型的对象不可JSON序列化 一般 ...
- Android --- 怎么把其他类型的数据转换成 Json 字符串
文章目录 一.其他类型的数据转换成 Json 字符串(原生方法) 二.使用 Google 的 Gson 库将各种类型的数据转换成 Json 字符串 一.其他类型的数据转换成 Json 字符串(原生方法 ...
- python 序列化压缩成字符串_Python 将json序列化后的字符串转换成字典(推荐)
一般而言下面的就可以完成需求了. def convertToDic(data): jsonDic=json.loads(data) return dict(jsonDic) 但实际应用中可能会出现一些 ...
- SpringDataJPA使用getOne(id)导致Json序列化失败
为了把对象扔进redis中,要给查询到的数据做JSON序列化,一开始都是好好的,直到遇到了如下的报错: org.codehaus.jackson.map.JsonMappingException: N ...
- json 反序列化 父子类型_Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo...
Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...
最新文章
- 京东一面:Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?我懵了。。...
- 端口保护:如果你不把我当回事,我就会让你好看
- idea配置jfinal_intellij idea安装与配置(Java开发配置篇)
- 计算机科学CSTA,学编程,搞懂CSTA K-12计算机科学学习标准
- MySQL导出表结构相关字段以及把字段由下划线转驼峰命名
- Ios9 html5,ios9,html5_ios9下在浏览器中通过scheme打开app的问题,ios9,html5 - phpStudy
- cdrom是多媒体微型计算机,全国计算机二级题库第三章
- Git 忽略已经提交的文件
- chap6_1 Sphere Environmental mapping in OGRE
- OpenStack创业“五虎将”分化
- linux系统移植到arm芯片难吗,Linux操作系统怎么移植到ARM平台?
- 渗透神器----Windows10 渗透工具包
- 量子计算机采用量子力学原理,量子计算机的工作是不是就是根据量子力学原理造的?...
- ideaIU-2020.1.3的安装
- 青果教务处系统爬虫(java)
- 在vue项目中使用阿里云播放器
- 短视频运营详解:抖音变现目前流行的是七种方式之一电商卖货
- 关于Spark Steaming中的Processing Time/Total Delay/Processing Delay
- 初探自动化测试(爬虫)框架nightmarenightwatch
- 计算机二战一个双非学校怎样,双非二战学长成功调剂985:看他的调剂院校选择!...
热门文章
- 前端的小玩意(11)上传文件和上传文件的后缀名限制
- 算法题总结的几种题型
- 智能微投:爆发前夜,莫让错误“知行”成绊脚石
- Word for mac V16.10中文版
- 6、USRP【入门软件无线电(SDR)】PySDR:使用 Python 的 SDR 和 DSP 指南
- mysql 查询近两周的记录_查询近一周、近两周的数据
- SpringCloud Gateway获取post请求体(request body)
- 2021年全球回转轴承收入大约4169.5百万美元,预计2028年达到6361.3百万美元
- 计算机电源 80plus,电脑的电源要如何选择?80PLUS是什么意思?一定要选全模组吗?...
- mysql安全保密设计_数据库安全于保密