javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > 前端雪花算法id导致精度缺失

使用雪花算法产生id导致前端精度缺失问题解决方案

作者:小学考第一

雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面这篇文章主要介绍了使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、问题根源

JavaScript的 Number类型安全精度最大为16位(IEEE 754标准),而雪花算法生成的ID通常为18-19位(如1896876827460800512),超出安全范围导致末2-3位精度丢失,前端则显示为( 1896876827460800500)。

二、解决方案

1. 全局配置Jackson序列化规则

通过ObjectMapper将Long类型序列化为String,确保前端接收为字符串类型:

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    SimpleModule module = new SimpleModule();
    module.addSerializer(Long.class, ToStringSerializer.instance);
    objectMapper.registerModule(module);
    return objectMapper;
}

●效果:id字段从数字(如1896876827460800512)转为字符串,如"1896876827460800512"),避免精度丢失 。

2. 实体类必须使用Long封装类

若实体类字段声明为基本类型long,Jackson不会触发序列化规则,因为:

●ToStringSerializer仅对Long封装类生效(long是基本类型,不在处理范围内)。

●正确声明方式:private Long id;

3. 检查其他可能覆盖配置的因素

●局部注解覆盖:若某些字段使用了@JsonFormat或@JsonSerialize,需移除或统一配置。

●全局与局部优先级:确保自定义ObjectMapper未被其他配置覆盖(如application.yml中的Jackson配置)。

4. 数据库与接口文档调整

●数据库字段类型:保持BIGINT(雪花ID兼容)。

●接口文档标注:明确说明id为字符串类型(如Swagger添加@Schema注解),避免前端误解析为数字。

5. 测试验证

通过Postman或浏览器检查响应,确认id字段类型已转为字符串:

{
  "id": "1896876827460800512", 
  "taskId": "1896866728268828672"
}

三、扩展建议

四、总结

    通过全局序列化配置 + 实体类使用Long封装类的组合方案,可彻底解决雪花ID精度丢失问题。

到此这篇关于使用雪花算法产生id导致前端精度缺失问题解决方案的文章就介绍到这了,更多相关前端雪花算法id导致精度缺失内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文