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

news2025/1/16 16:47:26

本章目录:

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

 一、问题描述 

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

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

而前端展示的为1594605819398193200

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

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

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

所以我们解决该问题的思路就是:把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类里多加一个判断

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3 Minute Thesis (3MT)

1 定义 资料来源&#xff1a;https://zhuanlan.zhihu.com/p/63325983?utm_id0 3MT原则&#xff1a;要把博士课题介绍给一个受过高等教育但没有专业背景的人并阐述它的重要性。 定义&#xff1a;三分钟论文(3MT)是一个学术比赛&#xff0c;帮助当前的研究生培养有效的演讲和沟…

[附源码]计算机毕业设计JAVA基于web的电子产品网络购物平台

[附源码]计算机毕业设计JAVA基于web的电子产品网络购物平台 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a;…

MyBatis搭建

目录 1.我的开发环境 2.创建maven工程 (1)打包方式 : jar (2)引入依赖 3.创建MyBatis的核心配置文件 4.创建mapper接口 5.创建MyBatis的映射文件 1.映射文件的命名规则: 2.MyBatis中可以面向接口操作数据 , 要保证两个一致 : 映射文件官方示例: 6.执行配置文件中的SQL…

HC-05蓝牙模块--------手机与STM32通信(代码编写)(上位机配置)保姆级教程

⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩因为之前无论是电赛还是做项目&#xff0c;都用到了蓝牙模块&#xff0c;如&#xff1a;手机和stm32的通信&#xff0c;电赛中的双车通信&#xff0c;还是遥感小车的…

19 01-通过状态掩码读取DTC数目

诊断协议那些事儿 诊断协议那些事儿专栏系列文章&#xff0c;本文介绍存储数据传输服务下的19服务ReadDTClnformation的第一个子功能&#xff08;01h&#xff09;&#xff0c;通过状态掩码读取DTC数目。 关联文章&#xff1a; 19服务List $19服务:DTCStatusMask和statusofDT…

肠道菌群化合物库——科研领域的研究靶点

近年来&#xff0c;肠道菌群已经成为科研领域的研究热点&#xff0c;涉及领域之广泛&#xff0c;最近几年的研究主要集中在肠道菌群与多种疾病发生和发展的联系。近年来&#xff0c;肠道菌群时常登上各大国际学术周刊&#xff0c;实火&#xff01; “闻声而来”的肠道菌群肠道…

【异构知识蒸馏:IVIF】

Heterogeneous Knowledge Distillation for Simultaneous Infrared-Visible Image Fusion and Super-Resolution &#xff08;同时进行红外-可见光图像融合和超分辨率的异构知识蒸馏&#xff09; 近年来&#xff0c;红外-可见光图像融合引起了越来越多的关注&#xff0c;并且…

数据采集网关如何打破数据孤岛,实现工业物联网

企业数字化发展到一定水平&#xff0c;就可能出现不平衡&#xff0c;催生出“数据孤岛”的现象。 企业内部存在多个设备多个系统&#xff0c;都有各自的数据&#xff0c;分门别类进行存储&#xff0c;这些部分之间累又建立有效的数据交换渠道&#xff0c;协议标准业不一致&…

实战讲解网关接口统一认证SpringCloudGateway(图+文)

1 缘起 继gateway限流篇&#xff1a;https://blog.csdn.net/Xin_101/article/details/127890605 之后&#xff0c;继续补充网关统一鉴权的相关应用&#xff0c; 网关作为所有流量入口&#xff0c;承接所有请求&#xff0c;因此&#xff0c;可以在网关层统一做鉴权&#xff0c;…

MIT6.830-2022-lab1实验思路详细讲解

文章目录前言一、6.830/Lab1 Start二、Exercise2.1、Exercise1&#xff1a;Fields and Tuples2.2、Exercise2&#xff1a;Catalog2.3、Exercise3&#xff1a;BufferPool2.4、Exercise4&#xff1a;HeapFile access method2.5、Exercise5&#xff1a;HeapFile2.6、Exercise6&…

DJ12-2-2 算术运算指令

目录 1. 加法指令 &#xff08;1&#xff09;ADD 指令 &#xff08;2&#xff09;ADC 指令 &#xff08;3&#xff09;INC 指令 2. 减法指令 &#xff08;1&#xff09;SUB 指令 &#xff08;2&#xff09;SBB 指令 &#xff08;3&#xff09;DEC 指令 &#xff08;4&…

Alluxio 2.9新版发布 | 重塑架构,支持大规模多租户环境

/ Alluxio宣布正式发布数据编排平台2.9版本 / Alluxio 2.9 版本的主要新增功能包括&#xff1a; 新增跨环境集群同步功能、增强Alluxio在Kubernetes上的可管理性、提高S3 API 安全性和用户体验 2022年11月17日&#xff0c;全球首创的开源数据编排软件开发商Alluxio宣布正式发…

1.2 分布

测度理论 (Durrett) 第五版 个人笔记 答案 Durrett高等概率论教材 (Probability) 攻读概率及统计/机器学习应用方向博士学位. Measure TheoryProbability SpacesDistributionsRandom VariablesIntegrationProperties of the IntegralExpected ValueProduct Measures, Fubini’…

[计算机毕业设计]机器视觉指纹识别图像识别

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

2022Q3运动户外行业数据分析(高增长概念解读)

本篇我们将继续来分析22年Q3季度中&#xff0c;运动户外行业的高增长概念。 在运动户外行业中&#xff0c;我们发现了3个高增长品类&#xff0c;分别是&#xff1a;泳镜、运动休闲鞋、运动包。 一、游泳用品高增长概念——泳镜 在功能上区分&#xff0c;泳镜可以分为竞速泳镜、…

十秒钟搞懂linux的软硬链接细节图解和目录结构文件的基本命令

秒懂linux链接图解一&#xff0c;软硬链接的分析1&#xff0c;软链接的图解&#xff1a;2&#xff0c;硬链接的图解3&#xff0c;软硬链接的区别4,目录创建软链接的语法格式二&#xff0c;linxu的根目录结构示意图和各部分的功能&#xff0c;可以根据单词部分记忆&#xff08;部…

SDN环境搭建(超详细)

文章目录前言一. 安装VMware workstation二、Ubuntn安装三、Mininet安装四、RYU安装五、WireShark安装六、在Mininet中启动可视化界面常见问题总结写在后面前言 最近在做SDN这方面的实验&#xff0c;在这里记录一下自己的学习过程和踩过的坑。 具体环境&#xff1a; VMware-wo…

RepGhost

轻量级的CNN模块重参数化技术构建硬件高效的 Ghost 模块,通过结构重新参数化技术开发一种硬件高效的 RepGhost 模块&#xff0c;以实现特征的隐式重用。RepGhostNet 把 Concat 操作去掉&#xff0c;同时修改现有结构以满足重参数化的规则。最终得到的 RepGhostNet 是一个高效的…

swift-类属性-MachO读取

上一篇 swift-类属性 为源码层面类属性结构剖析&#xff0c;接下来从MachO层面验证读取类属性内容 极简类结构 class IFLPerson2 {var age: Int 20var heigh: Double 180}MachO-__swift5_types读取 var size: UInt 0//__swift5_types section 的pFilevar ptr getsectdata(…

Alibaba内部传出的面试秘技,秋招offer尽收囊中

又逢“金九银十”&#xff0c;年轻的毕业生们满怀希望与忐忑&#xff0c;去寻找、竞争一个工作机会。已经在职的开发同学&#xff0c;也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而&#xff0c;面试人群众多&#xff0c;技术市场却相对冷淡&#xff0c;…