专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

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

ins518 2025-06-09 22:30:46 技术文章 6 ℃ 0 评论

我们在用springboot进行后端开发时,有时会使用雪花算法生成的ID值来替换数据库的自增值,当把该ID值传给前端时就会出现精度丢失的问题,因为雪花算法一般会生成18位或者19位宽度的数字,而前段只能使用16位宽度的数字。

如后端ID数据


前端接收后的数据


原因分析

Java后端Long类型的范围

-2^63~2^63,即:
-9223372036854775808~9223372036854775807,它是19位的。

前端JS的数字类型的范围

-2^53~2^53,即:
-9007199254740991~9007199254740991,它是16位的。

解决办法

方法一:将对象中的指定属性以文本的方式进行序列化

@JsonSerialize(using=ToStringSerializer.class)

private Long id;

方法二:在yml里全局配置

spring:

jackson:

generator:

#序列化的时候,将数值类型全部转换成字符串返回

write_numbers_as_strings:true

方法三:自定义Jackson对象转换构造器,指定需要序列化的类型

@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;

}

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表