在最近写毕业设计的时候,发现通过传递一个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"
}
],
前端序列化后
可以看得到,前端在对超大整数进行序列化时会造成精度丢失
总结
将id原本的类型Long改为String即可解决此问题。注意以后在开发时,数字类型参数,特别是浮点数或超大整数,尽量使用字符串传递。