使用雪花算法作为id返回前端精度丢失问题解决

SpringBoot返回long,前端接收进度丢失,SpringBoot 全局Long转String 本文为引文,我们在服务端做系统的时候,通常会约定一些数据返回格式,如金额、编号(用户id、订单编号…)、时间等,下面列举一下个人认为比较合理的类型! 金额 建议用分为单位,摈弃BigDecimal,或者Double等其他,因为会导致小数点后两位为.00的时候客户端接收后直接不显示,当然想要显示很简答,只需要在对应的返回对象上通过注解@JsonSerialize(using = BigDecimalSerialize.class)指定BigDecimalSerialize实现即可,或者(…找马同学),这种针对 阅读详情

后端id类型是Long类型,数据库存储id的类型是bigint

传到前端发现和数据库存储的数据不一致,精度丢失

解决思路:后端的ID(Long) ==> Jackson(Long转String) ==> 前端使用String类型的ID,前端使用js string精度就不会丢失了。那前端再把String类型的19位数字传回服务端的时候,可以用Long接收么?当然可以,这是Spring反序列化参数接收默认支持的行为。

最终方案就是:添加全局的配置。前端用String类型的雪花ID保持精度,后端及数据库继续使用Long(BigINT)类型不影响数据库查询执行效率。

上代码:

@Configuration
public class JacksonConfig {

  @Bean
  @Primary
  @ConditionalOnMissingBean(ObjectMapper.class)
  public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
  {
    ObjectMapper objectMapper = builder.createXmlMapper(false).build();

    // 全局配置序列化返回 JSON 处理
    SimpleModule simpleModule = new SimpleModule();
    //JSON Long ==> String
    simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
    objectMapper.registerModule(simpleModule);
    return objectMapper;
  }

}

为什么需要知识图谱?什么是知识图谱?——KG的前世今生 我的知乎专栏,对知识图谱感兴趣的朋友可以关注。标题的命名顺序可能让有的读者不太习惯。通常在介绍一个陌生事物的应用前,我们先给出其定义。之所以换个顺序,是为了不让读者一开始就接触比较冰冷生硬的概念刻板描述(后面我尽量用更具体、准确的例子来表达),另一方面也是为了通过现实生活中的例子自然的引入知识图谱的概念。希望通过这种方式加深读者的印象和理解。为了减轻读者理解的负担,我尽可能地避免引入过多的概念和技术 阅读详情

相关推荐

Windows系统监控实战:Grafana+Prometheus+node_exporter保姆级配置指南(含常见问题解决)

本文提供了一份详尽的Windows系统监控实战指南,详细讲解了如何从零部署Grafana、Prometheus和node_exporter(实际为windows_exporter)监控栈。内容涵盖核心组件认知、分步配置解析、高级生产环境考量,并重点针对配置过程中常见的“No Data”问题提供了系统性的排查手册,旨在帮助用户快速搭建稳定可靠的系统资源监控平台。

weixin_29197835的博客 1008

雪花算法生成的ID在返回给前端之后和生成的不一样,到底是什么原因?

最开始以为是被四舍五入了,上网查询后才发现是内部的问题,long类型继承的是number类,而number类型精度为16位,而雪花算法生成的id为19位,因此会导致进度丢失。这个方案如果此id用的类少,就可以改id的数据类型,但是当用到的类多的话要改过来就需要花很长时间,并且不能保证都能改过来,而且不会出问题。②通过添加一个全局配置来使long类型转为JSON中的string类型,省去了一个一个添加注解的麻烦。生成的id传给前端以后跟生成的不一样,就纳闷,在想为什么会出现这样的问题?①如果想要前端不丢失。.

小魏快起床的博客 1548

ESP32-S3驱动雨滴传感器实战:从原理到ADC/GPIO双模式数据采集

本文详细介绍了ESP32-S3驱动雨滴传感器的实战教程,涵盖其工作原理及ADC/GPIO双模式数据采集方法。通过解析传感器利用水的导电性检测雨量的核心机制,提供了完整的硬件连接方案与软件驱动代码,包括模拟量(AO)的ADC读取和数字量(DO)的GPIO读取,并附有调试技巧,帮助开发者快速实现雨滴检测功能。

weixin_32005771的博客 154

ID生成器

先注入bean,规则是:new IdWorker(1,1);参数为小于30的长整型 package com.ishicifang.common.util; import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkInterface; /** * <p>名称:IdWorker.java</p> * <p>描述:分布式自增长ID

weixin_45701008的博客 1074

蛋白质组学实战指南 | (八)从数据到洞见:差异蛋白筛选与功能解析全流程

本文系统阐述了蛋白质组学数据分析中,从原始数据质控到差异蛋白筛选与功能解析的全流程。重点介绍了数据质量评估、差异蛋白筛选的统计方法(包括多重检验校正)、功能注释与富集分析,以及蛋白互作网络构建与关键节点识别。最后,为如何将生物信息学洞见转化为实验验证提供了清晰的规划思路,助力研究者完成从数据到生物学知识的闭环。

weixin_29250573的博客 372

[TI板]MSPM0G3507——keil环境配置+烧录配置+vscode配置+空工程迁移+点灯+芯片解锁教程

本文介绍了MSPM0G3507开发环境的配置与烧录方法。主要内容包括:1)下载安装芯片支持包和SDK开发工具;2)通过串口或DAPLink两种方式实现程序烧录,详细说明了UniFlash软件的使用步骤和常见问题解决方法;3)简要提及工程迁移和LED点灯等基础操作。文章提供了完整的开发环境搭建指南,涵盖从软件安装到实际烧录的全过程,并附有相关工具下载链接和操作截图,帮助开发者快速上手MSPM0G3507开发。

qq_23220445的博客 1万+

解决前后端交互中雪花ID的问题

项目中采用雪花ID。该ID在后端中为Long类型,在前端中为number类型。但是,Long和number的精度不一样;故,会导致数据精度丢失。示例如下:

谷哥的小弟 2602

大疆OcuSync系统背后的黑科技:跳频扩频技术如何让你的无人机飞得更稳

本文深入解析了大疆OcuSync系统如何运用跳频扩频技术等先进无线通信方案,显著提升无人机在复杂环境下的飞行稳定性。系统通过跳频扩频与直接序列扩频技术协同工作,结合双频智能切换与多天线MIMO,有效对抗信号干扰与多径效应,确保控制指令与高清图传的可靠、低延迟传输,为用户带来更安心、更流畅的飞行体验。

ol7890123的博客 629

雪花Id(snowflake)主键(Long) ,前端丢失精度原理及解决之道

雪花Id(snowflake)主键(Long) ,前端丢失精度原理及解决之道

一颗浑身披带雪花的松树---[雪松] 1万+

牛顿法vs高斯牛顿法vs LM算法:三行代码说清核心区别(附性能对比表格)

本文通过对比牛顿法、高斯牛顿法和LM算法的核心迭代代码,揭示了三者在非线性最小二乘优化中的本质区别。LM算法通过引入阻尼因子,在高斯牛顿法的快速收敛与梯度下降的稳定性之间取得平衡,成为工程实践中鲁棒性最强的首选。文章还提供了清晰的性能对比表格,帮助开发者根据初始估计和问题性质快速选择合适算法。

weixin_29062255的博客 419

【PCIe 总线及设备入门学习专栏 1.3 -- PCIe 基础知识 lane和link介绍】

PCIe RC(Root Complex)是PCIe树的根节点,一个RC 可以包括多个 RP(Root Port),例如一个16 条 lane的PCIe RC 可以包括4个RP(4个x4的),或者8个RP(8个x2的)等等。在该模式下,数据传送由CPU执行I/O端口指令来按照字节或更大的数据单位来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式。国内应该有公司做出相应的phy芯片(例如芯动科技、牛芯半导体),毕竟常见的pcie 3.0才8 Gbps的速率,最新的6.0才64Gbps。

CodingCos的博客 2104

生成的雪花算法ID前端接收到的不一致问题处理

生成的雪花算法ID前端接收到的不一致问题处理

始末丶Yzx的博客 1220

GEE案例:计算区域生态总体脆弱性分析

计算区域生态总体脆弱性分析需要考虑多个指标和因素。下面是一个基本的方法:选择指标:选择一组能够反映区域生态系统脆弱性的指标。这些指标可以包括生物多样性指数、森林覆盖率、湿地保护率、土地退化程度等。为每个指标分配权重:为了使得各指标在计算中的重要性相对均衡,可以为每个指标分配一个权重。权重可以根据各指标的重要性和可利用的数据进行确定。数据收集和处理:收集每个指标的数据,并对其进行处理,确保数据的准确性和一致性。如果有需要,可以对数据进行归一化处理。计算指标值:根据收集的数据和权重,计算每个指标的值。

此星光明博客 466

Long类型雪花算法ID返回前端后三位精度丢失问题解决

Long类型雪花算法ID返回前端后三位精度丢失问题解决

ACGkaka的博客 2511

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Java】雪花算法产生的19位Long类型id返回前端精度丢失问题解决

有时候我们数据库表的主键会设置为Long类型,这时候如果使用雪花算法或者其他手段,在插入数据库时数值是20位的数,这时候返回给前端就会造成精度丢失,以下是用注解方式解决该问题。 FastJson序列机制下的项目 @JSONField(serializeUsing = ToStringSerializer.class) @JSONField(serializeUsing = ToStringSerializer.class) private Long id; Jackson序列机制下的项目 @Json

分享记录开发中的问题,欢迎一起探讨! 2245

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

雪花算法等生成Long类型的长Id返回给前端精度丢失问题解决方案

添加一个配置类HttpMessageConverters ,即可完美解决! @Configuration public class JsonHttpMessageConvert { @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverte.

cold_Blooder的博客 1994

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

gin雪花算法生成的id返回json化精度丢失问题的解决方案

前俩天刚给自己的一个项目加上了个雪花算法生成订单,好家伙,不生成不要紧,刚生成就出bug了 雪花算法生成id,后期如果要扩展到多服务器的话就方便很多,所以很多id生成都改成了雪花算法 我给购物车的订单id,地址id,用户id设置成由雪花算法生成的id,方便后期扩展到分布式部署 用户上传地址用的就是雪花算法的id,正常生成是没有问题的 但是回传到前端小程序的时候就出bug了,,他的订单使用c.json()返回数据的时候,精度丢失了 比如我的地址id是432812951087353858,传到前端

大鱼的博客 1448

springboot 项目 返回雪花算法的id 到vue前端 精度丢失

【代码】springboot 项目 返回雪花算法的id 到vue前端 精度丢失。

myStyle的博客 253

解决浏览器返回long类型丢失精度的问题

解决浏览器返回long类型丢失精度的问题 问题:由于项目使用的雪花算法生成主键ID,类型设置为了bigint,在开发接口调试阶段前端反馈返回的id丢失丢失精度 解决方案:配置json序列化,将返回的id从Long类型转为String类型 @Configuration @Slf4j public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public

小海米的博客 1007

前端对于Long类型的雪花ID无法识别

1.在PostMan里面请求接口能够完全正确的返回雪花算法生成的主键id,但是在Swagger或者前端接口请求 浏览器之中就会出现雪花算法精度损失问题。2.前端对于16位以上的Long类型数据精度丢失。

m0_56663158的博客 1598

Spring-boot项目练习笔记(一)JS处理Long型数据精度丢失问题

JavaScript(JS)处理Long型数据精度丢失问题,根据雪花算法生成的id修改数据失败问题。

赵四司机的博客 1140

雪花算法导致返回前端ID不一致问题

前后端ID值不一致

qq_30024063的博客 1064

雪花算法以Long类型返回前端丢失精度

雪花算法以Long类型数据返回前端丢失精度

yuanwxcsdn的博客 406

前端返回的id与数据库不一致问题

前后端id不一致问题

m0_73904503的博客 434

SpringMVC消息转换器

这是由于id是由雪花算法计算得来的Long类型数据传给前端时会出现精度丢失,java中Long类型长度为19位,但js是弱语言,最大只支持16位的接收,所以会导致id后三位精度丢失。解决方法是:将java里的Long类型转换成String返回给前端。

weixin_58269184的博客 353

mybatis-plus雪花算法自动生成ID到前端后精度丢失问题

后端实体参数使用Long类型是没有任何问题的,关键就在于Long类型到前端后在解析json时候会被解析为Number类型导致精度缺失。**注:**在springBoot应用中默认使用Jackson进行JSON序列化响应数据给前端。id的长度过长(19位),前端js的Number类型精度为16位,所以导致数据格式化精度丢失。优化后端返回给前端数据时候的JSON序列化,将Long类型转变为String响应给前端。修改后端全部实体的id为String类型,并且修改数据库类型。如图这是后端正常返回的数据,

爱学习的大雄的博客 3289
上一篇: ehcache是什么?ehcache和redis比较?ehcache结合springBoot如何使用?
下一篇: mysql排序失效问题
hello_xing
博客等级 码龄8年 1930粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值