Java后端Long类型的范围
-263~263,即:-9223372036854775808~9223372036854775807,它是19位的。
这个数字可以通过方法获得:Long.MAX_VALUE、Long_MIN_VALUE。
前端JS的数字类型的范围
-253~253,即:-9007199254740991~9007199254740991,它是16位的。
这个数字可以通过方法获得:Number.MAX_SAFE_INTEGER、Number.MIN_SAFE_INTEGER。
结论
可见,Java后端的Long宽度大于前端的。雪花算法一般会生成18位或者19位宽度的数字,那么这时就会出问题。
解决方法
实体类entity增加@JsonSerialize注解
@Data
@TableName("tb_course_base")
public class Course {
//序列化时,不采用long类型,而采用string类型,防止雪花精度丢失问题
@JsonSerialize(using= ToStringSerializer.class)
@TableId(type = IdType.ASSIGN_ID) //主键生成策略,雪花
private Long id;
private Long companyId; //公司编号
private String companyName; //公司名称