#记录工作中常见的问题
一、现象描述
前端显示:

在数据库中显示:
![]()
这是因为学生ID使用的是雪花算法(Snowflake ID),它会生成全局唯一的ID,在Java中通常是Long类型,Long类型的雪花算法ID可能超过JavaScript的取值范围。
-
Java Long类型:64位,取值范围
-2^63到2^63-1(-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807) -
JavaScript Number类型:64位双精度浮点数,最大安全整数是
2^53-1(9,007,199,254,740,991)
于是就出现了前端传递的id错误。
二、解决方法
最小改动:只需在实体类字段上添加一个注解,只针对特定字段生效,不影响其他Long类型字段
在雪花ID所在的实体类添加注释
/** 学生ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
这行代码告诉Jackson序列化器:"当序列化这个Long类型的id字段时,请使用ToStringSerializer来处理,而不是默认的Long序列化器。",添加注解后,Jackson会调用Long.toString()方法,将数字转换为字符串输出
前端效果展示:

1806

被折叠的 条评论
为什么被折叠?



