最近在与前端对接的过程中发现一些数据经过前端的查询编辑修改之后,存入到数据库中的数据和之前的原始数据总是对不上,后两位一直是零。导致本来正常的数据列表,经过一番操作之后列表一直报错,查询不到数据。在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类型做数据库查询性能会降低很多,通过这个注解即可解决性能问题,也可以保证数据一致。