js long类型精度丢失_解决js处理Long类型丢失精度的问题
项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种。
不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在获取数据时会丢失精度,从而造成数据的不准确,解决方式呢,就是在序列化时,会将Long类型的数据转化为String类型
在使用Spring MVC默认的Jackson时,我们可以这么做:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter =
new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
converters.add(jackson2HttpMessageConverter);
converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
}
}
当然,有时候项目中也可能会统一约定使用了fastjson,然而Spring MVC中默认是使用了Jackson的
在Spring Boot中将Jackson替换为fastjson一般会有两种方式:
第一种:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public HttpMessageConverters fastJsonHttpMessageConverter() {
return new HttpMessageConverters(new FastJsonHttpMessageConverter());
}
}
第二种:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List> converters) {
FastJsonHttpMessageConverter fastConverter =
new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
fastConverter.setFastJsonConfig(fastJsonConfig);
converters.add(fastConverter);
}
}
替换成fastjson之后,对于精度丢失问题,我们可以这么去做:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List> converters) {
FastJsonHttpMessageConverter fastConverter =
new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
SerializeConfig serializeConfig = SerializeConfig.globalInstance;
serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
serializeConfig.put(Long.class, ToStringSerializer.instance);
serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
fastJsonConfig.setSerializeConfig(serializeConfig);
fastConverter.setFastJsonConfig(fastJsonConfig);
converters.add(fastConverter);
}
}
我想对于另一种方式,怎么去做大家也该明白的吧,这里就不多说了。
需要注意的是,这里使用的fastjson的版本为1.2.31,版本不同,方式略有不同。
js long类型精度丢失_解决js处理Long类型丢失精度的问题相关推荐
- js取iframe 上级页面_原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法...
用原生js在父页面获取iframe子页面的元素,以及在子页面获取父页面元素,这是平时经常会用到的方法,这里写一个例子来总结下: 1.父页面(demo.html),在父页面修改子页面div的背景色为灰色 ...
- js 日期加一年_?Day.js 2KB时间库 和Moment.js一样的API
Moment.js 是一个大而全的 JS 时间库,很大地方便了我们处理日期和时间.但是 Moment.js太重了(200k+ with locals),可能一般项目也只使用到了她几个常用的API.虽然 ...
- base.dll丢失的解决方法_base.dll文件丢失修复教程
base.dll是电脑内十分重要的文件,它的丢失易导致游戏.应用软件等程序运行出现错误,致使程序无法正常运行,它的解决办法也是非常简单的,只要下载好base.dll文件,放置在对应系统的目录下面,运行 ...
- basroot.dll丢失的解决方法_basroot.dll文件丢失修复教程
basroot.dll是电脑内十分重要的文件,它的丢失易导致游戏.应用软件等程序运行出现错误,致使程序无法正常运行,它的解决办法也是非常简单的,只要下载好basroot.dll文件,放置在对应系统的目 ...
- js浮点数运算不精确 如何解决_解决 浏览器处理数字运算时精度丢失的方法
浏览器处理数字运算时精度丢失的方法 为什么0.1 + 0.2 不等于0.3.因为计算机不能精确表示0.1, 0.2这样的浮点数,计算时使用的是带有舍入误差的数 并不是所有的浮点数在计算机内部都存在舍入 ...
- js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;
原博1 原博2 方案1和方案2都是有效的 情景: 在计算浮点数时候,出现多余小数. 例如: 1.11 + 1 = 2.1100000000000003 为什么计算小数会出现误差? 浮点数值的最高进度是 ...
- java double 运算精度问题_关于java中Double类型的运算精度问题
如果我们编译运行下面这个程序会看到什么? public class Test{ public static void main(String args[]){ System.o ...
- js阻止子元素事件_阻止 JS 的冒泡事件
用了一段时间google inbox,赶脚mail task的样式很酷炫,于是也模仿着做了一个task管理系统. Google task有个behavior是点击页面别处,当前展开的mail就会收起. ...
- js list删除指定元素_删除js数组中的指定元素,有这两步就够了
js数组是js部分非常重要的知识,有时我们有这么个需求js数组删除指定元素,先定义一个函数来获取删除指定元素索引值,然后用js数组删除的方法,来删除指定元素即可,就两步不难,很简单. 1.JS的数组对 ...
最新文章
- 俄罗斯网络安全治理及其启示
- 【python】数据结构与算法—双端队列(二)
- leetcode944. 删列造序
- python Lambda 表达式
- 中专计算机专业教研方案,教研活动实施方案电脑基础知识IT计算机专业资料-教研活动实施方案.pdf...
- 浏览器调试时控制台出现:Uncaught SyntaxError: Unexpected identifier
- POJ 2891 Strange Way to Express Integers ★ (扩展欧几里德解同余式组)
- ORA-28002 the password will expire
- H3C Comware V7新增的RBAC
- HPB钱包与中间件接口
- java有函数吗_java有函数吗?
- 就让烟花来代替我对你的祝福叭 ~ 【生日快乐-简单烟花祝福特效】
- 管理者不能忽视的9大面谈技巧
- c语言程序能运行但屏幕不显示图片,c运行程序屏幕无显示!~~请高手指点!~~~...
- 11、函数进阶---装饰器
- FFmpeg入门详解之54:搭建环境ffmpeg
- PKPM学习:简单的开始
- Mysql数据库中如何存储大文本数据?
- linux_makefile文件编写,基本规则、工作原理、模式规则,wildcard函数、patsubst函数
- useEffect和useLayoutEffect的区别
热门文章
- 【ES】ReceiveTimeoutTransportException request_id
- 【Java】java JMX之ObjectName
- 【Java】IntegerCache的妙用和陷阱
- 【Kafka】Kafka 使用 Twitter 的 Bijection 类库实现 avro 的序列化与反序列化
- 【IDEA】IDEA git log 点击 没有代码变更
- 【Flink】The Kryo Output still contains data from a previous serialize call. It has to be flushed or
- 项目优化到一半还是崩了,新同事换了一套调优方案,全体颤抖。。。
- 为什么强烈不推荐使用stop、suspend方法来中断线程?
- OAuth2.0授权码模式原理与实战
- oracle数据字典(2.说明)