位置: IT常识 - 正文

解决雪花算法生成的ID传输前端后精度丢失(雪花算法workid)

编辑:rootadmin
解决雪花算法生成的ID传输前端后精度丢失

推荐整理分享解决雪花算法生成的ID传输前端后精度丢失(雪花算法workid),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:雪花算法改进,雪花算法的作用,雪花算法workid,雪花算法改进,雪花算法应用场景,雪花算法的作用,解决雪花算法生产问题,雪花算法改进,内容如对您有帮助,希望把文章链接给更多的朋友!

本章目录:

问题描述解决方案修改数据库字段配置MVC全局消息转换器修改Result类 一、问题描述 

在用雪花算法生成的ID传输到前端时,会出现后三位精度丢失

可以看到,我们得到的response为1594605819398193154

而前端展示的为1594605819398193200

这是因为JS是弱语言,前端接收数字类型参数为number

最大接收长度为16位,超出长度则会丢失精度

而JAVA的Long类型长度为19位,所以传输到前端的后三位精度丢失

解决雪花算法生成的ID传输前端后精度丢失(雪花算法workid)

所以我们解决该问题的思路就是:把java里的Long类型转换为String返回给前端

二、解决方案2.1、修改数据库字段

可以把数据库的ID字段从Long改为varchar,不过不建议这样做,这样修改后查询无法走索引,降低了效率

2.2、配置MVC全局消息转换器

我们可以在springmvc的配置类中(也就是继承了WebMvcConfigurationSupport接口的那个配置类)重写extendMessageConverters方法

/** * 扩展mvc框架的消息转换器 * @param converters */ @SneakyThrows @Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { //创建消息转换器对象 MappingJackson2HttpMessageConverter messageConverter=new MappingJackson2HttpMessageConverter(); //设置对象转换器,底层使用Jackson将Java对象转为json messageConverter.setObjectMapper(new JacksonObjectMapper()); //将上面的消息转换器对象追加到mvc框架的转换器集合中 converters.add(0,messageConverter); }

编写一个JacksonObjectMapper类

/** * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] */public class JacksonObjectMapper extends ObjectMapper { public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; public JacksonObjectMapper() throws NoSuchFieldException { SimpleModule simpleModule = new SimpleModule() .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))) .addSerializer(BigInteger.class, ToStringSerializer.instance) .addSerializer(Long.class, ToStringSerializer.instance) .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); //注册功能模块 例如,可以添加自定义序列化器和反序列化器 this.registerModule(simpleModule); }}

注意:该方法是将所有Long类型都序列化成String的《全局转换》 

2.3、修改Result类型

我这边封装了一个Result类,可以直接用String.valueOf去把Long类型的id转换成String

也可以在Result类里多加一个判断

本文链接地址:https://www.jiuchutong.com/zhishi/297564.html 转载请保留说明!

上一篇:【微信小程序】使用uni-app——开发首页搜索框导航栏(可同时兼容APP、H5、小程序)(微信小程序在哪里找?)

下一篇:前端 - get请求传递数组(前端get请求传数组)

  • 小米平板5pro怎么设置语音唤醒(小米平板5pro怎么开机)

    小米平板5pro怎么设置语音唤醒(小米平板5pro怎么开机)

  • 快手怎么改名字和昵称(快手怎么改名字空白)

    快手怎么改名字和昵称(快手怎么改名字空白)

  • 华为手机有短信回收站吗(华为手机有短信回收站在哪里怎么恢复)

    华为手机有短信回收站吗(华为手机有短信回收站在哪里怎么恢复)

  • 黑胶vip是什么意思(黑胶vip有什么区别)

    黑胶vip是什么意思(黑胶vip有什么区别)

  • 苹果手表gps和蜂窝的区别(苹果手表gps和蜂窝有什么区别)

    苹果手表gps和蜂窝的区别(苹果手表gps和蜂窝有什么区别)

  • 小米10青春版是否有红外功能(小米10青春版是什么处理器)

    小米10青春版是否有红外功能(小米10青春版是什么处理器)

  • 荣耀亲选和华为商城的区别(荣耀亲选和华为什么关系)

    荣耀亲选和华为商城的区别(荣耀亲选和华为什么关系)

  • 手机膜填充液对手机有影响吗(手机膜填充液对手机好吗)

    手机膜填充液对手机有影响吗(手机膜填充液对手机好吗)

  • 三菱plc和西门子plc有什么区别(三菱plc和西门子plc编程一样吗)

    三菱plc和西门子plc有什么区别(三菱plc和西门子plc编程一样吗)

  • 钉钉群怎么超过1000人(钉钉群怎么超过一个人)

    钉钉群怎么超过1000人(钉钉群怎么超过一个人)

  • 爱奇艺主设备怎么更换(爱奇艺主设备怎么设置不了)

    爱奇艺主设备怎么更换(爱奇艺主设备怎么设置不了)

  • 怎么在word里面批注(怎么在word里面加入另一个pdf)

    怎么在word里面批注(怎么在word里面加入另一个pdf)

  • 苹果电信信号不好怎么办(苹果电信信号不满格)

    苹果电信信号不好怎么办(苹果电信信号不满格)

  • 蜂窝数据是什么(苹果的蜂窝数据是什么)

    蜂窝数据是什么(苹果的蜂窝数据是什么)

  • 电脑键盘符号怎么转换(电脑键盘符号怎么输入)

    电脑键盘符号怎么转换(电脑键盘符号怎么输入)

  • 手机怎么创qq群(手机怎么创qq群号)

    手机怎么创qq群(手机怎么创qq群号)

  • 计算机的储存器是指(计算机的储存器采用分级方式是为了什么)

    计算机的储存器是指(计算机的储存器采用分级方式是为了什么)

  • 一个企业最多可申请开通几个速卖通店铺账户(一个企业最多可以申请几个速卖通账号)

    一个企业最多可申请开通几个速卖通店铺账户(一个企业最多可以申请几个速卖通账号)

  • 闲聊怎么设置消息通知(闲聊模式怎么关闭)

    闲聊怎么设置消息通知(闲聊模式怎么关闭)

  • 手机淘宝闲鱼在哪里找(手机淘宝闲鱼在哪里进入)

    手机淘宝闲鱼在哪里找(手机淘宝闲鱼在哪里进入)

  • 苹果手机如何给照片画线(苹果手机如何给应用上锁密码)

    苹果手机如何给照片画线(苹果手机如何给应用上锁密码)

  • 宝马x5蓝牙怎么和手机连接(宝马x5蓝牙怎么连接手机)

    宝马x5蓝牙怎么和手机连接(宝马x5蓝牙怎么连接手机)

  • airpods怎么接电话(airpods充电盒)

    airpods怎么接电话(airpods充电盒)

  • 最新2021win10专业版/企业版/教育版激活秘钥推荐 附激活工具(最新专业版win10)

    最新2021win10专业版/企业版/教育版激活秘钥推荐 附激活工具(最新专业版win10)

  • python类如何自定义实例化(python 定制类)

    python类如何自定义实例化(python 定制类)

  • 社保由税务局统一征收的地区
  • 公允价值变动损益属于什么科目
  • 差额纳税是什么税
  • 金蝶财务软件年末结账步骤
  • 甲企业持有乙企业的非上市股票2000股
  • 注册资本 投资比例
  • 应纳税所得额是含税还是不含税
  • 个体户减免增值税
  • 水利建设基金的计税依据
  • 企业员工的高铁票进项税如何申报
  • 以前年度少计提费用
  • 现金清查时,发现长款200元,未查明原因,经批准后转销
  • 化工原材料销售挣钱吗
  • 房地产企业契税税率是多少
  • 纳税人选择简易办法一经选择
  • 以股东投资为基础
  • 材料成本会计的主要内容
  • 开了负数发票印花税减掉吗?
  • 公司委托其他公司为员工代缴社保公积金
  • 民办非企业单位是私立还是公立
  • 建筑企业一般纳税人提供建筑服务属于老项目
  • 不合规进项税如何账务处理
  • 个人所得税申报错误如何更正申报
  • 什么情况下只交城建税不交教育及地方税?
  • 小规模纳税人要做固定资产吗
  • 差旅费进项税能抵扣吗
  • 降温费和取暖费标准
  • 银行承兑 贷款
  • 结息的会计分录怎么写
  • 工程预缴增值税2019最新规定
  • 参加抽奖活动中奖却不发奖品
  • win8系统如何设置u盘启动
  • xp系统咋样
  • 2023年电子发票如何申领
  • php7.3安装
  • 新一代状态管理工具 -- Pinia 上手指南
  • 前端解决跨域问题的8种方案(最新最全)
  • 工费经费的计税依据要扣除含税部分吗
  • vue路由守卫用法
  • 只有进项税没有销项税如何报税
  • 业务招待费进项转出报表怎么填
  • 季度企业所得税会计分录怎么做
  • 住宿费发票可以开专票吗
  • MongoDB aggregate 运用篇个人总结
  • 织梦怎么改网站主页
  • 利息收入算什么会计科目
  • 个体户交个税新政策
  • 国税局网上申报
  • 年终奖政策,提成怎么算
  • 以汽车投资作为投资项目
  • 工程款抵房款什么意思
  • 应付账款会计分录例题
  • 收到对方红字发票信息表怎么处理
  • 免税收入计入起征点吗
  • 月底计提工资的会计处理
  • 没有期初数据如何建账
  • MySQL5.6下windows msi安装详细介绍
  • mysql 含有关键字
  • 电脑bios找不到硬盘怎么办
  • linux修改ulimit立即生效
  • linux系统百科
  • windows7安装过程中出错
  • win7开机显示一堆英文
  • win10登录微软账户后进不去桌面
  • win7架设ftp服务器
  • win8卸载软件在哪里卸载
  • pm2使用手册
  • cocos做游戏
  • unity 角色控制器设置isTrigger问题
  • javascriptz
  • 可交互原型是什么
  • jquery实现ajax提交表单信息的简单方法(推荐)
  • android基础知识
  • js面向对象是什么意思
  • python函数参数的传递方法
  • android软件开发实例
  • android 4.2
  • 青海国家税务局总局官网
  • 代理记账公司账务处理
  • 全国增值税发票查验平台官网手机
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设