雪花ID算法导致的Long类型的ID 精度丢失问题

由于JavaScript的number类型最大值低于Java的long类型,导致Long类型的ID在前端显示时出现精度丢失问题。解决方法包括使用特定的对象转换器如JacksonObjectMapper,在WebMvcConfig配置类中扩展消息转换器来确保JSON转换过程中的精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:
js 的 number 类型支持的最大值是9007199254740992(16位),java 的 long 类型最大值9223372036854775807(19位),远高于 js number类型的最大值,所以long类型的ID传给前端就会导致精度丢失。
解决方法一:

 id-type: ID_WORKER_STR
 简单来说就是 id 转 为string类型,db和生成的id数据类型都改为 string 类型
 缺点:牺牲了 long 类型的性能优势

解决方法二:

在实体类上加上注解
@JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long id;

解决方法三:
1.提供对象转换器JacksonObjectMapper,基于Jackson进行Java对象到json数据的转换。
2.在WebMvcConfig配置类中扩展Spring mvc的消息转换器,在此消息转换器中使用提供的对象转换器进行Java对象到json数据的转换

/**
 * 对象映射器:基于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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值