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

  • 为什么抖音发视频一个播放都没有(为什么抖音发视频不清晰)

    为什么抖音发视频一个播放都没有(为什么抖音发视频不清晰)

  • 顺风车可不可以邀请多个人接(顺风车可不可以提前预约)

    顺风车可不可以邀请多个人接(顺风车可不可以提前预约)

  • qq输入法打字震动怎么办(qq输入法震动)

    qq输入法打字震动怎么办(qq输入法震动)

  • 钉钉作业修改后老师知道吗(钉钉作业修改后再发布有记录吗)

    钉钉作业修改后老师知道吗(钉钉作业修改后再发布有记录吗)

  • iphone自带测分贝在哪(iphone 测量分贝)

    iphone自带测分贝在哪(iphone 测量分贝)

  • 拼多多一键开新店好处(拼多多一键开新店怎么没有了)

    拼多多一键开新店好处(拼多多一键开新店怎么没有了)

  • oppofindx充满多少时间(oppofindx充电多少)

    oppofindx充满多少时间(oppofindx充电多少)

  • 智伴机器人连不上WiFi(智伴机器人连不上wifi)

    智伴机器人连不上WiFi(智伴机器人连不上wifi)

  • 苹果xs电池不耐用(苹果xs电池不耐电怎么办)

    苹果xs电池不耐用(苹果xs电池不耐电怎么办)

  • 说说评论权限哪里设置的(说说评论怎么设置私密)

    说说评论权限哪里设置的(说说评论怎么设置私密)

  • 看不见对方朋友圈是被删了吗(看不见对方朋友圈一条横线)

    看不见对方朋友圈是被删了吗(看不见对方朋友圈一条横线)

  • 集线器是第几层设备(集线器属于)

    集线器是第几层设备(集线器属于)

  • 主板硬盘一般有哪些接口(主板一般几个硬盘接口)

    主板硬盘一般有哪些接口(主板一般几个硬盘接口)

  • iphone8plus支持18w快充吗(iPhone8plus支持无线充电吗)

    iphone8plus支持18w快充吗(iPhone8plus支持无线充电吗)

  • 华为p30的手机长宽是(华为p30长屏截图怎么使用)

    华为p30的手机长宽是(华为p30长屏截图怎么使用)

  • download模式什么意思(downloadmode模式如何处理)

    download模式什么意思(downloadmode模式如何处理)

  • 京东订单锁定啥意思(京东订单状态锁定)

    京东订单锁定啥意思(京东订单状态锁定)

  • 手机爱奇艺怎么发弹幕(手机爱奇艺怎么退出登录)

    手机爱奇艺怎么发弹幕(手机爱奇艺怎么退出登录)

  • 华为手机怎么修改运营商(华为手机怎么修改时间)

    华为手机怎么修改运营商(华为手机怎么修改时间)

  • 怎么关闭淘宝虚拟3d人生(怎么关闭淘宝虚拟号码)

    怎么关闭淘宝虚拟3d人生(怎么关闭淘宝虚拟号码)

  • 小米耳机如何切换歌曲(小米耳机如何切换到双耳)

    小米耳机如何切换歌曲(小米耳机如何切换到双耳)

  • vrv需要加新风系统么(vrv新风系统工作原理)

    vrv需要加新风系统么(vrv新风系统工作原理)

  • 苹果手表3蜂窝怎么收费(苹果手表3蜂窝版价格)

    苹果手表3蜂窝怎么收费(苹果手表3蜂窝版价格)

  • 手机为什么不能打电话(手机为什么不能闪充了)

    手机为什么不能打电话(手机为什么不能闪充了)

  • beoplay e8怎么连接(beoplay e8怎么连接一个)

    beoplay e8怎么连接(beoplay e8怎么连接一个)

  • 苹果手机在哪里可以测量距离(苹果手机在哪里看激活时间)

    苹果手机在哪里可以测量距离(苹果手机在哪里看激活时间)

  • 已抵扣的进项税发票怎么查询明细
  • 小规模季度不超过30万是含税还是不含税
  • 个人独资企业要承担无限责任吗
  • 进项发票已认证,发现发票有问题怎么办
  • 以前年度多计管账怎么做
  • 增值税减免税申报明细表免税代码和名称
  • 已申报个税减免什么意思
  • 资助的开发经费可税前扣除吗
  • 税务记账保存多少年纳税人转小规模
  • 投资活动购建固定资产
  • 材料入库时实收什么意思
  • 工程保险费属于企业管理费吗
  • 企业购买房产可以抵扣增值税吗
  • 单位聘请临时工工资怎么报税
  • 新建厂房装修费账务处理
  • 个税计提比实际缴纳多怎么办
  • 职工福利费支出计入什么科目
  • 研发支出费用如何计算应交所得税?
  • 外地项目不预缴税款
  • 年末提取盈余公积的会计分录怎么写
  • 付佣金怎么做分录
  • 抵扣给供货商预缴税款
  • 疫情期间企业贷款利率多少
  • linux killall
  • 购买产品优惠计入什么科目
  • php输出mysql查询结果
  • 公司比赛奖金计入什么科目
  • 新会计准则2020变化
  • 股东退股怎么分钱
  • 购买轿车增值税可抵扣吗?
  • 如何更改饿了么配送费
  • php实现上传文件
  • react组件如何设置dom
  • flex布局教程实例篇
  • css实现文字颜色渐变
  • atx系统的grpck命令可验证组的合法性
  • 小企业的流动资产
  • 本月增值税申报截止日
  • 建筑行业销售材料怎么做
  • 递归是从底向上逐层计算的
  • 小规模企业跨月发票如何冲红
  • 企业所得税包含员工工资吗
  • 单位财务报销制度和流程
  • 个体工商户季度超过9万怎么交税
  • 收到个税手续费返还怎么做分录
  • 发票入账的管理规定
  • 政府发的奖金需要交个税吗
  • 法院退诉讼费账务处理
  • 暂估费用科目
  • 个税计提多了怎么办,跨年度了
  • 销售产品的软件平台
  • 成本核算的会计账户
  • 税收优惠退回的税金怎么入账
  • 固定资产为什么不能直接计入费用
  • 企业工资薪金支出怎么确认
  • 商会开年会费用怎么入账
  • 房地产实收资本怎么算
  • 工程分包总包产生的 税费由谁承担
  • mysql常用命令语句
  • sqlserver获取当前年
  • sql判断是否存在记录
  • win7双硬盘双系统
  • windows 10的应用商店中的应用
  • win8 系统设置
  • cocos2d 网页
  • 详解16型人格
  • 浏览器复制插件在哪
  • cmd命令可以干嘛
  • js获取当前日期并格式化
  • javascript definitive guide
  • linux常用命令及实例
  • 怎么配置nodejs的环境
  • nodejs创建项目
  • javascript学习指南
  • Python中list初始化方法示例
  • jquery写函数
  • 人员进出管理系统
  • 怎么打印纳税申报表带章的
  • 督察综合服务中心是干什么的
  • 市中区税务局办税大厅地址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设