返回顶部
首页 > 资讯 > 精选 >JSON序列化导致Long类型被搞成Integer怎么解决
  • 745
分享到

JSON序列化导致Long类型被搞成Integer怎么解决

2023-06-26 05:06:19 745人浏览 安东尼
摘要

本篇内容主要讲解“JSON序列化导致Long类型被搞成Integer怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jsON序列化导致Long类型被搞成Integer怎么解决”吧!JSON

本篇内容主要讲解“JSON序列化导致Long类型被搞成Integer怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习jsON序列化导致Long类型被搞成Integer怎么解决”吧!

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被转为了Integer        Map 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 问题

思考

总之开发中尽量不要乱用一些对象属性转换工具,导致属性漏掉或者转错。

不要滥用Map或者JSONObject来传递参数。

如果是含Object类型JSON序列化要特别小心上述问题!!

JSON格式转int/long报错

现象:通过查库(mysql)获取信息,其中有个字段A的值为int类型的5,然后在前端页面,把数据(json)通过ajax请求到后台(在前端页面A的类型为Number),在后台用Map<String, Object>接收json数据,此时A的值变为5.0了,从整型变为了浮点型。此时转换成int会出现类型转换异常。

问题:从前端页面传递过来的json串,后台能map接收,再利用map的get()方法获取相应的属性值,这时当属性类型为int或者long类型时会出现转换异常。

解决方法,先将相应的属性转换成Number类型,再调用Number对应的方法进行转换。但有个地方需要注意,需要先判断该属性是否为空再进行转换,否则会出现NullPointerException。

JSON序列化导致Long类型被搞成Integer怎么解决

Gson转换导致int转换成double的问题

使用情景:后端返回的json字符串,通过gson处理后,原本是int类型,现在获取到的是double类型的。

JSON序列化导致Long类型被搞成Integer怎么解决

解决:

int i = ((Number)fromJson.get("int")).intValue();int i = Math.round(Double.parseDouble(fromJson.get("int").toString));

到此,相信大家对“JSON序列化导致Long类型被搞成Integer怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: JSON序列化导致Long类型被搞成Integer怎么解决

本文链接: https://www.lsjlt.com/news/307035.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作