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

解决方式:

1、后端的Long类型的id转用String存储,不推荐,失去了其Long类型本身的意义。

2、在Long类型字段上使用注解标明序列化方式,代码量不大的情况可以考虑

@JsonSerialize(using = ToStringSerializer.class)private Long id;

3、实现WebMvcConfigurer接口,重写configureMessageConverters方法

@Overridepublic void configureMessageConverters(List>converters) {

MappingJackson2HttpMessageConverter jackson2HttpMessageConverter=

newMappingJackson2HttpMessageConverter();

ObjectMapper objectMapper= newObjectMapper();

SimpleModule simpleModule= newSimpleModule();

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(newStringHttpMessageConverter(StandardCharsets.UTF_8));

}

但是这种方式需要开启@EnableWebMvc注解。

开启这个注解意味着springboot的mvc等自动配置失效,所以这个方式实际上也是不可取的。

类似不可取的还有重写HttpMessageConverters,这会覆盖其他的类型转换。

@Configurationpublic classLongToJsonConfig {publicLongToJsonConfig() {

}

@BeanpublicHttpMessageConverters customConverters() {

MappingJackson2HttpMessageConverter jackson2HttpMessageConverter= newMappingJackson2HttpMessageConverter();

ObjectMapper objectMapper= newObjectMapper();

SimpleModule simpleModule= newSimpleModule();

simpleModule.addSerializer(Long.class, ToStringSerializer.instance);

simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);

objectMapper.registerModule(simpleModule);

jackson2HttpMessageConverter.setObjectMapper(objectMapper);return new HttpMessageConverters(newHttpMessageConverter[]{jackson2HttpMessageConverter});

}

}

以上方式基本都不可取。

4、重新注册ObjectMapper的Long类型序列化方式,推荐使用,暂时没发现问题。

@Configurationpublic class LongClassMessageConverter implementsInitializingBean {

@Resource

ObjectMapper objectMapper;privateSimpleModule getSimpleModule() {

SimpleModule simpleModule= newSimpleModule();

simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);

simpleModule.addSerializer(Long.class, ToStringSerializer.instance);//暂时放弃对小long的转换,约定与前端交互数据时,大Long全部转换成字符串//simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);

objectMapper.registerModule(simpleModule);returnsimpleModule;

}

@Overridepublic voidafterPropertiesSet() {

SimpleModule simpleModule=getSimpleModule();

objectMapper.registerModule(simpleModule);

}

}

5、重新构建Jackson序列化方式,与第四点类似的解决方式,推荐使用。

@Configurationpublic classJacksonConfig {/*** Jackson全局转化long类型为String,解决jackson序列化时传入前端Long类型缺失精度问题*/@BeanpublicJackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {

Jackson2ObjectMapperBuilderCustomizer cunstomizer= newJackson2ObjectMapperBuilderCustomizer() {

@Overridepublic voidcustomize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {

jacksonObjectMapperBuilder.serializerByType(BigInteger.class, ToStringSerializer.instance);

jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);//jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance);

}

};returncunstomizer;

}

}

6、以上方式针对springboot默认的Jackson序列化,fastjson等其他json组件类似处理。

7、如果前端自身涉及到Long类型的计算,那么需要前端自己实现Long类型支持,参考:https://github.com/dcodeIO/long.js

js long类型精度丢失_后端Long类型传到前端精度丢失的正确解决方式相关推荐

  1. Long类型参数传到前端精度丢失的解决方案

    Long类型参数传到前端精度丢失的解决方案 参考文章: (1)Long类型参数传到前端精度丢失的解决方案 (2)https://www.cnblogs.com/zeng1994/p/7ea79563e ...

  2. layui 传递前端请求_前端请求后端,后端查询完毕传到前端 ,用layui 将 数据分页...

    前端:我用的是layui框架的分页 js 文件 layui.config({ base : "script/" }).use(['form','layer','jquery','l ...

  3. 二阶段补充:文件上传服务端处理,后端文件上传、前端两种文件上传方式

    1.文件上传 2.后端文件上传 两种方案: 兼容性较好的commons-fileupload,支持所有版本的Servlet,即所有版本的Tomcat 优点: 兼容性 缺点 需要外部jar,比较麻烦.代 ...

  4. nginx怎么用_后端服务老是重启,前端该如何拯救自己?nginx的妙用

    背景 当前软件开发中,绝大部分团队都已经实现了前后端分离,不过实施的过程中并不总是甜头,前端和后端的协作过程中总是会遇到让人头疼的问题. 比如,前端的同学正在全神贯注的调试着代码,突然后端把服务停了( ...

  5. epoch 增大 精度降低_气密性测试设备是如何保证测试精度?

    气密性测试设备的检测精度是非常关键的,别名气密检测设备,在各种气密性测试.防水测试工况中,是否检测准确无误,且高效的展开气密测试,防水测试都要把控好气密测试的精度,那么,影响气密测试精度的要素主要有哪 ...

  6. 后端ajaxPost请求传给前端的显示乱码问题

    后端查询的数据库数据显示正常,可是返回前端时在前端页面显示乱码 在你的请求头上@RequestMapping上加上这句话: produces = {"application/json;cha ...

  7. multipartfile 获取音频时长_我在音频平台日赚150元的正确打开方式。或许适合你...

    听一本书,比看一本书让我们获取知识变得更加的容易和方便,随时随地都可以进行学习,不论是躺在床上,还是在开车都可以随时收听,音频不同于图文,我们不需要聚精会神的看,音频他特有的属性,能在各种场景中发挥最 ...

  8. 信息报送不及时整改措施_工商年报如何报送?原来这才是正确打开方式

    积累云提醒大家又到了每年的年报季.是不是还搞不懂什么是工商年报?啥时候年报呢?年报怎么报? 一.年报的时间: 每年工商年报的时间是1月1日到6月30日,商事主体要向工商部门报送上一年度的年度报告并向社 ...

  9. aws s3 獲取所有文件_通过Java上传下载AWS S3文件,并解决文件数量超过1000的问题...

    1 前言 Amazon S3 (Simple Storage Service)是很常用的文件存储服务,我们的场景是上游把流水文件放到S3,我们再从S3读取并对账. 2 初始化S3 首先要获取相关的账号 ...

最新文章

  1. golang类型断言的使用(Type Assertion)
  2. html图片自适应浏览器高度,css如何高度自适应浏览器高度?
  3. C++ 数据结构 线性链表
  4. 腾讯Blade Team发现云虚拟化平台逃逸漏洞 积极护航云生态安全
  5. 工业相机,大恒,面振相机8脚电源线和I/O触发接口线,颜色和接法说明和触发软件设定
  6. oracle查询当天数据三种方式性能对比
  7. 网络通信基础知识简介
  8. Data Base学习记录:关系模型
  9. python matrix用法_numpy中matrix使用方法
  10. Factory Track 同步获取 Infor CloudSuite Industrial 数据
  11. 饿了么4年 + 阿里2年:研发路上的一些总结与思考
  12. 微信公众平台数据统计功能的作用是什么?
  13. 用CSS实现阴阳八卦图等图形
  14. 上面两点下面一个三角形_一个调和线束的证明
  15. 拓新药业301089
  16. 幼儿抽象逻辑思维举例_【干货】教师资格《幼儿保教知识与能力》重点归纳一...
  17. Neural Tangent Kernel 理解(一)原论文解读
  18. Rail 3流行插件与替换部件简介
  19. 安全系统工程 张景林2014_安全系统工程 第二版 [张景林 主编] 2014年版
  20. fastapi——简单快速入门

热门文章

  1. 路灯照明(python)
  2. 阿里巴巴API接口 ,中国站按关键字搜索商品
  3. iphone导出照片到pc_如何将照片从任何计算机导出到iPhone或iPad
  4. Java 跳出For循环总结
  5. rabbitmq消息ACK确认机制及发送失败处理
  6. 记录踩过的坑-WPS表格
  7. 三相无刷电机驱动STC
  8. Maven插件的编写
  9. 从Meerkat的失败、映客的走红,看直播伪风口
  10. 如何把数据从阿里云迁移到华为云