造成原因:JS内置有32位整数,而number类型的安全整数是53位。如果超过53位,则精度会丢失。正如现在后台传来一个64位的Long型整数,因此超过了53位,所以后台返回的值和前台获取的值会不一样。

Java序列化JSON时long型数值,会出现精度丢失的问题。

原因:

java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值).

解决办法一:

使用ToStringSerializer的注解,让系统序列化

时,保留相关精度

@JsonSerialize(using=ToStringSerializer.class)

private Long createdBy;

FastJson 注解

@JSONField(serializeUsing= ToStringSerializer.class)

上述方法需要在每个对象都配上该注解,此方法过于繁锁。

解决办法(二):

使用全局配置,将转换时实现自动ToStringSerializer序列化

Override

public void configureMessageConverters(List> 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);

项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种。当然,有时候项目中也可能会统一约定使用了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);

}

}

biginteger和long精度_修复Long类型太长,而Java序列化JSON丢失精度问题的方法相关推荐

  1. java json太长_修复Long类型太长,而Java序列化JSON丢失精度问题的方法

    Java序列化JSON时long型数值,会出现精度丢失的问题. 原因: java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值). 解决办法一: 使用 ...

  2. 修复Long类型太长转为JSON格式的时候出错的问题

    这边项目要求ID是自动生成的20位Long型数字 但是实际中应用的时候回发生一种问题就是,查询的时候debug的时候数据都正常,但是返回前端的时候就会发现,数据错误了. 大体就是类似于下面的这种情况. ...

  3. double类型数据做加和操作时会丢失精度问题处理

    double类型的数据做加和操作 时会丢失精度,如下操作结果为: int a = 3;         double b = 0.03;         double c = 0.03; double ...

  4. 如何反映两条曲线的拟合精度_【隆旅干货分享】差压传感器的应用及精度特性分析...

    /// 专 业 的 工 业 传 感 与 测 量 知 乎 号 /// / 前言 / 差压传感器通常被用于试验台.风洞.泄漏检测系统和其他应用中.每种应用的工程师都在寻求对他们所在行业十分重要的传感器改进 ...

  5. java transient关键字_嗯?你真的会用 Java 序列化机制?

    码农每日一题长按关注,工作日每天分享一个技术知识点. 一.序列化.反序列化概念及其使用场景 1.序列化.反序列化的概念 简单的讲,序列化就是将java对象转化成二进制保存到磁盘中去,反序列化就是从磁盘 ...

  6. ai杀手级_游戏花了太长时间才能利用stadias杀手级功能

    ai杀手级 On July 1, Crayta, a game that allows people to collaborate on making other games, exclusively ...

  7. 排烟管道过长怎么处理_抽油烟机因管道太长排烟困难有何办法解决

    抽油烟机的室外排烟管道距离地面多高排烟效果 在2.2米至2.4米排烟效果较好.###高矮只会是否烟气在室外消散的时间! 2020-08-30 欧柏抽油烟机门打不开有什么办法 第一步:旋下油杯,倒去积油 ...

  8. js long类型精度丢失_后端Long类型传到前端精度丢失的正确解决方式

    原因:前端js对Long类型支持的精度不够,导致后端使用的Long传到前端丢失精度,比如现在分布式id生成算法"雪花算法"在使用中就会出现问题. 解决方式: 1.后端的Long类型 ...

  9. js long类型精度丢失_解决js处理Long类型丢失精度的问题

    项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种. 不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在 ...

最新文章

  1. 使用标准模板find函数来对结构体容器进行查找
  2. java dateformat 线程安全_SimpleDateFormat线程安全问题深入解析
  3. 洛谷P1169 棋盘制作(悬线法)
  4. jsp页面中使用超链接标签a中的属性href和onclick同时触发怎么执行
  5. ProxySQL 监控和统计
  6. 一天1个机器学习知识点(三)
  7. WinAPI: midiOutReset - 重置输出设备
  8. C语言32个关键字与C++62个关键字详解
  9. 2021牛客暑期多校训练营5 E-Eert Esiwtib(树形dp+位运算)
  10. 这道笔试题竟然运行不出错
  11. 使用 DataAdapter 和 DataSet 更新数据库
  12. css连续的纯数字或字母强制换行
  13. 301重定向错误(细心就不应该出错)
  14. 域渗透——Local Administrator Password Solution
  15. Exceptions, Catch, and Throw(Chapter 10 of Programming Ruby)
  16. android 页面icon拉伸_页面转场: 忽略它可能会使你犯错
  17. 西游记与面向对象编程
  18. 微信网页授权只能配置一个域名
  19. JavaScript逻辑运算与或非
  20. qmh(qtmediahub)插件研究

热门文章

  1. 立面设计模式–设计观点
  2. 使用WS-Trust / STS采样器扩展JMeter
  3. Mockito和Hamcrest的试驾制造商
  4. 使用JAXB从XSD生成XML
  5. 背景区域为负样本什么意思_词向量-skipgram与负采样
  6. bat 存储过程返回值_为什么不推荐使用存储过程?
  7. solr cloud 更新 solrconfig 配置_Solr各版本新特性「4.x,5.x,6.x,7.x」
  8. C 常用新特性(下)
  9. js 转化为实体符_js转html实体的方法
  10. mysql binlog线程恢复_使用MySQL SQL线程回放Binlog实现恢复