项目中很多时候都会用到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类型丢失精度的问题相关推荐

  1. js取iframe 上级页面_原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法...

    用原生js在父页面获取iframe子页面的元素,以及在子页面获取父页面元素,这是平时经常会用到的方法,这里写一个例子来总结下: 1.父页面(demo.html),在父页面修改子页面div的背景色为灰色 ...

  2. js 日期加一年_?Day.js 2KB时间库 和Moment.js一样的API

    Moment.js 是一个大而全的 JS 时间库,很大地方便了我们处理日期和时间.但是 Moment.js太重了(200k+ with locals),可能一般项目也只使用到了她几个常用的API.虽然 ...

  3. base.dll丢失的解决方法_base.dll文件丢失修复教程

    base.dll是电脑内十分重要的文件,它的丢失易导致游戏.应用软件等程序运行出现错误,致使程序无法正常运行,它的解决办法也是非常简单的,只要下载好base.dll文件,放置在对应系统的目录下面,运行 ...

  4. basroot.dll丢失的解决方法_basroot.dll文件丢失修复教程

    basroot.dll是电脑内十分重要的文件,它的丢失易导致游戏.应用软件等程序运行出现错误,致使程序无法正常运行,它的解决办法也是非常简单的,只要下载好basroot.dll文件,放置在对应系统的目 ...

  5. js浮点数运算不精确 如何解决_解决 浏览器处理数字运算时精度丢失的方法

    浏览器处理数字运算时精度丢失的方法 为什么0.1 + 0.2 不等于0.3.因为计算机不能精确表示0.1, 0.2这样的浮点数,计算时使用的是带有舍入误差的数 并不是所有的浮点数在计算机内部都存在舍入 ...

  6. js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;

    原博1 原博2 方案1和方案2都是有效的 情景: 在计算浮点数时候,出现多余小数. 例如: 1.11 + 1 = 2.1100000000000003 为什么计算小数会出现误差? 浮点数值的最高进度是 ...

  7. java double 运算精度问题_关于java中Double类型的运算精度问题

    如果我们编译运行下面这个程序会看到什么? public class Test{     public static void main(String args[]){         System.o ...

  8. js阻止子元素事件_阻止 JS 的冒泡事件

    用了一段时间google inbox,赶脚mail task的样式很酷炫,于是也模仿着做了一个task管理系统. Google task有个behavior是点击页面别处,当前展开的mail就会收起. ...

  9. js list删除指定元素_删除js数组中的指定元素,有这两步就够了

    js数组是js部分非常重要的知识,有时我们有这么个需求js数组删除指定元素,先定义一个函数来获取删除指定元素索引值,然后用js数组删除的方法,来删除指定元素即可,就两步不难,很简单. 1.JS的数组对 ...

最新文章

  1. 俄罗斯网络安全治理及其启示
  2. 【python】数据结构与算法—双端队列(二)
  3. leetcode944. 删列造序
  4. python Lambda 表达式
  5. 中专计算机专业教研方案,教研活动实施方案电脑基础知识IT计算机专业资料-教研活动实施方案.pdf...
  6. 浏览器调试时控制台出现:Uncaught SyntaxError: Unexpected identifier
  7. POJ 2891 Strange Way to Express Integers ★ (扩展欧几里德解同余式组)
  8. ORA-28002 the password will expire
  9. H3C Comware V7新增的RBAC
  10. HPB钱包与中间件接口
  11. java有函数吗_java有函数吗?
  12. 就让烟花来代替我对你的祝福叭 ~ 【生日快乐-简单烟花祝福特效】
  13. 管理者不能忽视的9大面谈技巧
  14. c语言程序能运行但屏幕不显示图片,c运行程序屏幕无显示!~~请高手指点!~~~...
  15. 11、函数进阶---装饰器
  16. FFmpeg入门详解之54:搭建环境ffmpeg
  17. PKPM学习:简单的开始
  18. Mysql数据库中如何存储大文本数据?
  19. linux_makefile文件编写,基本规则、工作原理、模式规则,wildcard函数、patsubst函数
  20. useEffect和useLayoutEffect的区别

热门文章

  1. 【ES】ReceiveTimeoutTransportException request_id
  2. 【Java】java JMX之ObjectName
  3. 【Java】IntegerCache的妙用和陷阱
  4. 【Kafka】Kafka 使用 Twitter 的 Bijection 类库实现 avro 的序列化与反序列化
  5. 【IDEA】IDEA git log 点击 没有代码变更
  6. 【Flink】The Kryo Output still contains data from a previous serialize call. It has to be flushed or
  7. 项目优化到一半还是崩了,新同事换了一套调优方案,全体颤抖。。。
  8. 为什么强烈不推荐使用stop、suspend方法来中断线程?
  9. OAuth2.0授权码模式原理与实战
  10. oracle数据字典(2.说明)