一、问题
在使用雪花算法生成 id 作为主键,作为响应传递到浏览器时,会出现前端显示的数据和后端实际数据不一致的情况:
浏览器收到的响应:
后端实际传输的数据:
可见:long 类型的数据响应在过大时,会导致数据错误
这是浏览器 JavaScript 中 Number 类型的精度限制(最大安全整数为2^53-1)导致的,如果 Long 类型的值超过了这个范围,就可能导致精度丢失。
二、解决办法
使用 @JsonSerialize 注解将过大的 Long 类型数据转换为 String 类型数据即可:
@Getter
@Setter
public class QuestionVO {
// long 型数据过大返回给前端会发生数据截断导致数据错误, 需要转换成 string 类型
@JsonSerialize(using = ToStringSerializer.class)
private Long questionId;
private String title;
private Integer difficulty;
private String createName;
// 配置日期自动格式化
@JsonFormat(pattern = "yyyy-HH-dd HH:mm:ss")
private LocalDateTime createTime;
}
此时会得到正确响应: