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

 更新时间:2026年06月17日 11:54:49   作者:爱学习的大雄  
本文探讨了前端接收到后端数据异常的问题,特别是ID长度过导致前端解析精度丢失,提出将Long类型转换为String以解决精度问题,并介绍了SpringBoot中Jackson的JSON序列化优化方案

问题发生

前端接收到后端的数据出现异常,异常如下:

如图这是后端正常返回的数据,

但是点击预览时发现这个id的数据被改变了

这就导致了我通过id去修改相关数据时无法成功

问题原因

id的长度过长(19位),前端js的Number类型精度为16位,所以导致数据格式化精度丢失

这个id是我用mybatis-plus的雪花算法自动生成的,后端实体类似如下:

后端实体参数使用Long类型是没有任何问题的,关键就在于Long类型到前端后在解析json时候会被解析为Number类型导致精度缺失。

问题解决

方案一

修改后端全部实体的id为String类型,并且修改数据库类型

方案二

优化后端返回给前端数据时候的JSON序列化,将Long类型转变为String响应给前端

**注:**在springBoot应用中默认使用Jackson进行JSON序列化响应数据给前端

package com.newblog.security.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
 * <p>
 *
 * </p>
 *
 * @author:雷子杰
 * @date:2023/12/10
 */
@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;
    }

}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot整合Thymeleaf与FreeMarker视图层技术

    SpringBoot整合Thymeleaf与FreeMarker视图层技术

    在目前的企业级应用开发中,前后端分离是趋势,但是视图层技术还占有一席之地。Spring Boot 对视图层技术提供了很好的支持,福安防推荐使用的模板引擎是Thymeleaf,不过想FreeMarker也支持,JSP技术在这里并不推荐使用
    2022-08-08
  • SpringBoot集成Hadoop对HDFS的文件操作方法

    SpringBoot集成Hadoop对HDFS的文件操作方法

    这篇文章主要介绍了SpringBoot集成Hadoop对HDFS的文件操作方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • 使用google.kaptcha来生成图片验证码的实现方法

    使用google.kaptcha来生成图片验证码的实现方法

    这篇文章主要介绍了使用google.kaptcha来生成图片验证码的实现方法,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • Java实现读取CSV文件并将数据放入对象

    Java实现读取CSV文件并将数据放入对象

    CSV文件是一种常见的数据存储格式,广泛应用于数据交换,日志记录和表格数据处理,在Java开发中,读取CSV文件并将数据映射到对象中是常见的需求,本文将详细介绍几种常见方法,有需要的可以了解下
    2025-06-06
  • Java后端必会Linux常用命令之一篇搞懂日志、进程、端口、部署

    Java后端必会Linux常用命令之一篇搞懂日志、进程、端口、部署

    掌握Linux命令行是开发者的必备技能,本文用最简方式梳理高频基础命令,每个命令配常用示例,适合新手快速查阅,这篇文章主要介绍了Java后端必会Linux常用命令之一篇搞懂日志、进程、端口、部署的相关资料,需要的朋友可以参考下
    2026-05-05
  • Java微信分享接口开发详解

    Java微信分享接口开发详解

    这篇文章主要为大家详细介绍了Java微信分享接口开发的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • 快速解决IDEA运行控制台中文乱码的问题

    快速解决IDEA运行控制台中文乱码的问题

    这段文章详细介绍了如何解决中文乱码问题,通过配置TomcatServer、IntelliJIDEA全局设置、项目编码及属性文件编码等步骤确保所有设置都正确无误,配置完成后记得重启IDEA以使更改生效
    2026-05-05
  • 一文带你快速了解java中的static关键词

    一文带你快速了解java中的static关键词

    这篇文章主要给大家介绍了关于java中static关键词的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • jetbrain fleet对标vscode实际操作

    jetbrain fleet对标vscode实际操作

    Gradle是一个基于Apache Ant和Apache Maven概念项目自动化构建开源工具,jetbrain家的fleet(已获得预览权限)直接对标vscode , fleet有望超过vscode吗?今天我们实际操作下
    2021-12-12
  • spring boot 配置动态刷新详解

    spring boot 配置动态刷新详解

    这篇文章主要介绍了spring boot 配置动态刷新实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09

最新评论