位置: 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请求传数组)

  • 苹果xr的扬声器左边不响(苹果xr的扬声器在哪)

    苹果xr的扬声器左边不响(苹果xr的扬声器在哪)

  • 怎样删除抖音喜欢作品(怎样删除抖音喜欢的视频记录呢)

    怎样删除抖音喜欢作品(怎样删除抖音喜欢的视频记录呢)

  • 图片怎么放进文件夹里(图片怎么放进文件夹里啊手机)

    图片怎么放进文件夹里(图片怎么放进文件夹里啊手机)

  • 桌面反转了怎么办(桌面翻转了)

    桌面反转了怎么办(桌面翻转了)

  • 手机出厂时会有划痕吗(手机出厂时会有病毒吗)

    手机出厂时会有划痕吗(手机出厂时会有病毒吗)

  • 全民k歌送花能删掉吗(全民k歌送花能赚钱吗)

    全民k歌送花能删掉吗(全民k歌送花能赚钱吗)

  • iphone8相机怎么拍出背景虚化(iphone8plus怎么开广角)

    iphone8相机怎么拍出背景虚化(iphone8plus怎么开广角)

  • 微信群发限制什么文字(微信群发功能限制了怎么办)

    微信群发限制什么文字(微信群发功能限制了怎么办)

  • 电话手表发热正常吗(电话手表发热怎么回事)

    电话手表发热正常吗(电话手表发热怎么回事)

  • 苹果7支持蓝牙5.0吗(苹果7支持蓝牙5.1吗)

    苹果7支持蓝牙5.0吗(苹果7支持蓝牙5.1吗)

  • 电脑怎么多选照片(电脑怎么多选照片发送QQ)

    电脑怎么多选照片(电脑怎么多选照片发送QQ)

  • 可立拍是什么(可立拍是什么软件,可以删除吗)

    可立拍是什么(可立拍是什么软件,可以删除吗)

  • 苹果xs卡顿怎么解决(苹果xs很卡怎么回事)

    苹果xs卡顿怎么解决(苹果xs很卡怎么回事)

  • 快手黑名单有什么用(快手上的黑名单有什么作用)

    快手黑名单有什么用(快手上的黑名单有什么作用)

  • 通用流量是全国通用吗(通用流量全国流量有什么区别)

    通用流量是全国通用吗(通用流量全国流量有什么区别)

  • 微信朋友圈卡住不动了怎么办(朋友圈卡住了)

    微信朋友圈卡住不动了怎么办(朋友圈卡住了)

  • vivo手机led灯怎么开(vivo手机灯怎么调亮点)

    vivo手机led灯怎么开(vivo手机灯怎么调亮点)

  • 钉钉怎么看员工请假(钉钉怎么看员工打卡照片)

    钉钉怎么看员工请假(钉钉怎么看员工打卡照片)

  • 苹果7p怎么连蓝牙耳机(苹果7p怎么连蓝牙键盘)

    苹果7p怎么连蓝牙耳机(苹果7p怎么连蓝牙键盘)

  • procreate手机能用吗(手机可以用procreate)

    procreate手机能用吗(手机可以用procreate)

  • 抖音上的彩虹是什么意思(抖音上的彩虹是啥)

    抖音上的彩虹是什么意思(抖音上的彩虹是啥)

  • 爱奇艺里怎样下载电视剧(爱奇艺怎样下载电影到手机)

    爱奇艺里怎样下载电视剧(爱奇艺怎样下载电影到手机)

  • 9524开头的是啥号(9524开头的是什么电话)

    9524开头的是啥号(9524开头的是什么电话)

  • 滴滴永久封禁解决办法(滴滴永久封禁解封要多久)

    滴滴永久封禁解决办法(滴滴永久封禁解封要多久)

  • 怎么改善网站设计(如何改进网站设计)

    怎么改善网站设计(如何改进网站设计)

  • Linux中将执行过的命令记录到日志并发送到服务器的方法(linux命令执行成功后会返回什么)

    Linux中将执行过的命令记录到日志并发送到服务器的方法(linux命令执行成功后会返回什么)

  • 有趣的HTML实例(二) 404页面(有趣的html简单代码)

    有趣的HTML实例(二) 404页面(有趣的html简单代码)

  • 印花税退税减半征收会计分录怎么写?
  • 所得税费用包括递延所得税吗
  • 利润分配的规则
  • 开发支出在资产负债表是怎
  • 餐饮业成本的正确表述是
  • 个人转款到对公账户会计分录
  • 员工全额承担社保账务怎么做?
  • 专用发票抵扣联放在凭证中吗
  • 价外补贴需要交增值税吗
  • 企业助学捐款分录怎么写
  • 分包工程有哪些风险
  • 申报专项资金项目是什么
  • 公司还法人借款网银转账
  • 红字发票怎么申报?
  • 俱乐部会员有什么用
  • 自来水企业应该交什么税
  • 建筑施工的会计科目
  • 交到公户上的钱,还没到账可以退回吗?
  • 损失与费用的区别
  • 电脑网卡介绍
  • win10更新21h1后很卡
  • 华为鸿蒙harmonyos官网4.0升级
  • win7系统电脑开机密码忘记了怎么办
  • typecho插件开发教程
  • php read
  • 想做酒水批发的生意怎么做?
  • 应付债券的会计分录有哪些
  • 代开的发票需要企业盖章还是税务机关盖章?
  • 企业收到分红款,要怎么处理才合理
  • vue多入口文件
  • 车间装修预算表
  • 隐藏index.html
  • 玩转ChatGPT:中科院ChatGPT Academic项目部署与测评
  • 销项税比进项税多怎么办
  • 土石方工程的税费缴纳方法
  • 期初未分配利润在哪个表
  • 企业所得税季初和季末怎么算
  • python中如何删除文件
  • python中self详解
  • 工程施工与工程结算对冲分录
  • 工会经费的会计分录2022
  • 无形资产收益额的具体测算方法有
  • 应纳税所得额的各项扣除包括什么
  • sqlserver FOR XML PATH 语句的应用
  • 企业为职工支付的补充医疗保险费
  • 职工伙食费账务处理
  • 应收账款的账面价值是什么
  • 预付账款是负数有什么税收风险
  • 房地产开发成本测算套表(全过程)
  • 退货开增值税专票可以用负数吗
  • 产品质量问题扣款账务处理
  • 哪些合同需要缴税
  • 劳动仲裁支付的补偿金计入什么科目
  • 公司车辆违章
  • 生产线计提折旧是否会减少现金流
  • 分公司是否需要独立核算
  • where条件加判断
  • mysql里面的数据类型
  • xp系统卡到开机画面
  • 苹果mac怎么下载淘宝
  • centos怎么添加用户
  • slserves.exe - slserves是什么进程
  • win8系统与win10哪个好
  • mysql删除key
  • win8使用技巧 图文
  • Linux运维工程师工作内容
  • win10系统出现问题怎么办
  • cocos2dx粒子效果
  • 解决在ios8中, cocos2dx 2.x版本里CCClippingNode没有效果的问题
  • unity connected games
  • unity3d documentation
  • node.js做服务器
  • android基础知识
  • java对象怎么比较
  • jquery删除数据
  • 税控盘税务数字书驱动找不到应用程序是咋回事
  • 即征即退什么时候确认收入
  • 大连明珠卡手机nfc充值
  • 政府补贴 收入
  • 出口退税外汇汇率如何确定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设