文档章节

Java序列化JSON时long型数值不准确

landyking
 landyking
发布于 2014/11/11 10:20
字数 318
阅读 591
收藏 0

现象

项目中用到了唯一ID生成器.生成出的ID时long型的(比如说4616189619433466044).
通过某个rest接口中返回json数据后,发现浏览器解析完变成了4616189619433466000

原因

大致描述:java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值).
详情参考这里http://stackoverflow.com/questions/17320706/javascript-long-integer

rest接口返回的json字符串中,数值还是对的.当js对json进行解析并转成js object的时候,出现了问题.

解决方法

方法就是不用number来保存long值,而是使用string.可以在客户端js修改,也可以在服务端序列化的时候修改.
此处给出sprign mvc 使用 jackson时的解决方案.

[@Override](https://my.oschina.net/u/1162528)
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();

    ObjectMapper objectMapper = new ObjectMapper();
    /**
     * 序列换成json时,将所有的long变成string
     * 因为js中得数字类型不能包含所有的java long值
     */
    SimpleModule simpleModule = new SimpleModule();
    simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
    simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
    objectMapper.registerModule(simpleModule);

    jackson2HttpMessageConverter.setObjectMapper(objectMapper);
    converters.add(jackson2HttpMessageConverter);
}

© 著作权归作者所有

共有 人打赏支持
landyking
粉丝 10
博文 49
码字总数 26968
作品 0
郑州
高级程序员
Java序列化与JSON序列化大比拼

一、背景 有项目需要传输Map结构的数据,有人倾向用Java序列化来做,有人倾向用JSON的序列化来做。所以我们还是比比吧。 Java观点:Object2Object,使用时简单快速。 JSON观点:JSON格式与语...

NoahX
2013/03/10
0
20
有效选择七个关于Java的JSON开源类库

April 4, 2014 By Constantin Marian Alin 翻译:无若 (英语原文:http://www.developer.com/lang/jscript/top-7-open-source-json-binding-providers-available-today.html) 简介 JSON是J......

无若
2014/04/19
0
1
(1)java序列化--java.io.Serializable接口解析

(PS:本文为作者原著,如需转载,请注明出处-_^) 使用java以来,序列化随处可见,至于为什么要用序列化、序列化能解决什么问题,作为一个普通的码农,一般不怎么会去深入研究,由于最近在看...

sumekey
2011/09/07
0
0
alibaba fastjson(json序列化器)序列化部分源码解析-1-总体分析

fastjson官方地址: http://code.alibabatech.com/wiki/display/FastJSON/Home 从javaeye上看到了阿里一位人士写的fastjson,特别是其中如何将java对象序列化成json字符串这段。笔者比较关注,...

老盖
2011/06/20
0
0
Java EE8的五大最新特性

本文由ImportNew -enigma 翻译自dzone。欢迎加入翻译小组。转载请见文末要求。 备受期待的 Java Enterprise Edition 8 发布了两个令人兴奋的全新 API (JSON-Binding 1.0 和 Java EE Securi...

ImportNew
07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

职场老人谈:Linux学习分享

随着Linux系统慢慢渗透到生活的方方面面,对Linux的基本操作就越来越必要了。 我是一位软件测试工程师,初次接触Linux主要是因为需要配置Linux服务器。因为Linux系统是一套开源的操作系统,安...

linux-tao
24分钟前
1
0
Oracle chr() ascii()

函数简介 实用函数 chr() 和 ascii() chr() 函数将ASCII码转换为字符: ASCII码 –> 字符; ascii() 函数将字符转换为ASCII码: 字符 –> ASCII码; 在 Oracle 中 chr() 函数和 ascii() 是一对...

taadis
25分钟前
2
0
职场老人谈:Linux学习分享

随着Linux系统慢慢渗透到生活的方方面面,对Linux的基本操作就越来越必要了。 我是一位软件测试工程师,初次接触Linux主要是因为需要配置Linux服务器。因为Linux系统是一套开源的操作系统,安...

linuxprobe16
34分钟前
1
0
Confluence 6 Windows 中以服务方式自动重启的原因

针对长时间使用的 Confluence,我们推荐你配置 Confluence 自动随操作系统重启而启动。针对一些 Windows 的服务器,这意味着需要让 Confluence 以服务的方式运行。 有下面 2 种方式来以服务的...

honeymose
今天
4
0
day93-20180920-英语流利阅读-待学习

时尚之觞:外表光鲜靓丽,其实穷得要命 Lala 2018-09-20 1.今日导读 讲到时尚界,我们脑海里浮现的可能都是模特和设计师光鲜靓丽、从容潇洒的模样。可是,最近在法国出版的一本书却颠覆了我们...

飞鱼说编程
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部