最近在与前端对接的过程中发现一些数据经过前端的查询编辑修改之后,存入到数据库中的数据和之前的原始数据总是对不上,后两位一直是零。导致本来正常的数据列表,经过一番操作之后列表一直报错,查询不到数据。在debug模式下,终于观察到,在前端调用详情时,我反给他的主键ID后两位是不对的
然后想到Long类型的长度是16位,雪花算法生成的ID是19位,这样返回的话,肯定会出现精度丢失。
解决方案:
import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(shape = JsonFormat.Shape.STRING) @ApiModelProperty(value = "主键ID") private Long id;

这样的话返回给前端的就会格式化为String类型,就不会出现精度丢失。想到这里,有小伙伴就说了为什么不能直接返回String类型呢?因为主键为String类型做数据库查询性能会降低很多,通过这个注解即可解决性能问题,也可以保证数据一致。
前端数据处理与精度丢失:Long到String的转换解决方案
博客讲述了在与前端对接时遇到的数据精度丢失问题,由于Long类型的ID在经过雪花算法后变成19位,前端处理后导致后两位变为零。解决方案是使用Jackson库的@JsonFormat注解将Long类型主键转换为String,避免精度丢失,同时保持良好的查询性能。此外,讨论了直接使用String类型作为主键可能带来的查询性能下降问题。
1万+

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



