后端雪花算法主键ID传到前端变了

Mybatis Plus 的主键策略:

java 复制代码
    /**
     * id
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

这个主键策略会用雪花算法生成一个 19位的ID,比如 1791006670084734978

现象

后端生成的 id 是正常的,通过 swagger 文档此时获取到的 id 也和数据库中的 id 一致,但是在前端用 number 存储 id 之后发现变成了 179 100 667 008 473 4000

可能是因为 number 的精度只有16位,而雪花算法的精度是 19位,所以导致后面三位丢失了。

  1. 最暴力的做法,就是把id改为 string 类型,不过太复杂,可能会出现很多问题,会比较麻烦。

  2. 全局配置来让 Long类型转换为 JSON 中的string 类型

java 复制代码
@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;
  }

}
  1. 在 application.yml 中加配置
java 复制代码
spring:
  jackson:
    generator:
      write-numbers-as-strings: true  
  1. 在id 字段上加注解
java 复制代码
@JsonSerialize(using = ToStringSerializer.class)

文章来源:雪花算法生成的ID在返回给前端之后和生成的不一样,到底是什么原因?_雪花算法返给前端不准确-CSDN博客

相关推荐
默_笙23 分钟前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
优选资讯35 分钟前
标签打印软件怎么对接 Excel 数据
前端·excel
Escalating_xu1 小时前
【C 语言】数据在内存中的存储:补码、大小端、整型陷阱与 IEEE 754 全解析
java·c语言·网络
灯澜忆梦1 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
一个风轻云淡2 小时前
GCC 和 GDB命令简单解读
java·linux·前端
省钱兄--zs2 小时前
西安24小时自助健身房解决方案实战:系统开发与部署全流程指南
java·spring boot·系统架构·intellij-idea·需求分析
资料库012 小时前
Linux 8个常见运维故障排查
java·linux·运维
要开心吖ZSH2 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
u0111026752 小时前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式