前端序列化导致的精度丢失

2024-03-05

在最近写毕业设计的时候,发现通过传递一个id修改相关实体的信息时,修改不成功,后面发现前端在对超大整数进行序列化时,会导致精度的丢失。所以导致前端传递的是一个丢失精度的id,在数据库中根本不存在,所以导致修改无法成功。

这个问题在之前的开发中就遇到过,这次疏忽大意了!特此记录一下。

实体类


@Data
public class Dept implements Serializable{
    private static final long serialVersionUID = 1L;
    private Long id;
    private String deptName;
    private Date createTime;
    private String deptDirector;
    private String deptPhone;
}

返回的json

 "records": [
     {
       "id": 1764867971869483009, // // 类型为Long
       "deptName": "智工学院",
       "createTime": "2024-03-05 12:18:09",
       "deptDirector": "啦啦啦",
       "deptPhone": "12"
      },
      {
       "id": 1764868074894172162, // 类型为Long
       "deptName": "艺术学院",
       "createTime": "2024-03-05 12:18:33",
       "deptDirector": "热热热",
       "deptPhone": "4343"
       }
 ],

前端序列化后

可以看得到,前端在对超大整数进行序列化时会造成精度丢失

比特截图2024-03-05-12-27-24.png

总结

将id原本的类型Long改为String即可解决此问题。注意以后在开发时,数字类型参数,特别是浮点数或超大整数,尽量使用字符串传递。

PREV
详解Javascript数据类型,浅拷贝及深拷贝
NEXT
mybatis-plus复杂之查询条件加()