一、背景

最近遇到一个错误,就是某个字段肯定是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经典巨坑相关推荐

  1. Net深入实战系列—JSON序列化那点事儿

    序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...

  2. Java序列化——JDK序列化与Json序列化

    Java原生序列化 Java原生序列化我们可能会了解的比较多,Java类通过实现Serializable接口来实现该类对象的序列化,这个接口非常特殊,没有任何方法,只起标识作用.Java序列化保留了对 ...

  3. ue4 unreal4 json序列化工具 数据转成字符串等

    首先说一个也能序列化的插件 VaRest 这个能序列化能发请求,但是序列化这块不太好用,可能是我不怎么会用吧... ------------------------------------------ ...

  4. 解决Python自带的json序列化工具不能序列化datetime类型数据问题

    解决Python自带的json序列化工具不能序列化datetime类型数据问题 参考文章: (1)解决Python自带的json序列化工具不能序列化datetime类型数据问题 (2)https:// ...

  5. Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化...

    Object of type 'ListSerializer' is not JSON serializable "listserializer"类型的对象不可JSON序列化 一般 ...

  6. Android --- 怎么把其他类型的数据转换成 Json 字符串

    文章目录 一.其他类型的数据转换成 Json 字符串(原生方法) 二.使用 Google 的 Gson 库将各种类型的数据转换成 Json 字符串 一.其他类型的数据转换成 Json 字符串(原生方法 ...

  7. python 序列化压缩成字符串_Python 将json序列化后的字符串转换成字典(推荐)

    一般而言下面的就可以完成需求了. def convertToDic(data): jsonDic=json.loads(data) return dict(jsonDic) 但实际应用中可能会出现一些 ...

  8. SpringDataJPA使用getOne(id)导致Json序列化失败

    为了把对象扔进redis中,要给查询到的数据做JSON序列化,一开始都是好好的,直到遇到了如下的报错: org.codehaus.jackson.map.JsonMappingException: N ...

  9. json 反序列化 父子类型_Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo...

    Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...

最新文章

  1. 京东一面:Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?我懵了。。...
  2. 端口保护:如果你不把我当回事,我就会让你好看
  3. idea配置jfinal_intellij idea安装与配置(Java开发配置篇)
  4. 计算机科学CSTA,学编程,搞懂CSTA K-12计算机科学学习标准
  5. MySQL导出表结构相关字段以及把字段由下划线转驼峰命名
  6. Ios9 html5,ios9,html5_ios9下在浏览器中通过scheme打开app的问题,ios9,html5 - phpStudy
  7. cdrom是多媒体微型计算机,全国计算机二级题库第三章
  8. Git 忽略已经提交的文件
  9. chap6_1 Sphere Environmental mapping in OGRE
  10. OpenStack创业“五虎将”分化
  11. linux系统移植到arm芯片难吗,Linux操作系统怎么移植到ARM平台?
  12. 渗透神器----Windows10 渗透工具包
  13. 量子计算机采用量子力学原理,量子计算机的工作是不是就是根据量子力学原理造的?...
  14. ideaIU-2020.1.3的安装
  15. 青果教务处系统爬虫(java)
  16. 在vue项目中使用阿里云播放器
  17. 短视频运营详解:抖音变现目前流行的是七种方式之一电商卖货
  18. 关于Spark Steaming中的Processing Time/Total Delay/Processing Delay
  19. 初探自动化测试(爬虫)框架nightmarenightwatch
  20. 计算机二战一个双非学校怎样,双非二战学长成功调剂985:看他的调剂院校选择!...

热门文章

  1. 前端的小玩意(11)上传文件和上传文件的后缀名限制
  2. 算法题总结的几种题型
  3. 智能微投:爆发前夜,莫让错误“知行”成绊脚石
  4. Word for mac V16.10中文版
  5. 6、USRP【入门软件无线电(SDR)】PySDR:使用 Python 的 SDR 和 DSP 指南
  6. mysql 查询近两周的记录_查询近一周、近两周的数据
  7. SpringCloud Gateway获取post请求体(request body)
  8. 2021年全球回转轴承收入大约4169.5百万美元,预计2028年达到6361.3百万美元
  9. 计算机电源 80plus,电脑的电源要如何选择?80PLUS是什么意思?一定要选全模组吗?...
  10. mysql安全保密设计_数据库安全于保密