超过 js 的 number 类型最大值(9007 1992 5474 0992)的解决办法
bug经过:点击修改无法展示信息(修改时调用queryOne,以id(long)为值,页面传过去的id=1480042498255640-00 ,在数据库中该id=148004249825564012,即错误的id)
根本原因:
js的number类型有个最大值(安全值)。即2的53次方,为9007199254740992。如果超过这个值,那么js会出现不精确的问题。这个值为16位。
解决方法:
1.后端发字符串类型。
将后端发过来的long类型转为string类型再向前端传。如果向前端传的是DAO集合,则每个DAO都需要转类型,太过于繁琐。想想就算了。
2.在userDao中加入一个字段
如果项目已经成型并且修改数据库会造成不可预料的问题那么可以在User对象中再增加一个String类型id映射字段,如下
private Long userId;
private String userIdStr;
public String getUserIdStr() {
return this.userId+"";
}
public void setUserIdStr(String userIdStr) {
this.userIdStr = userIdStr;
}
这个方法是比较靠谱的,确实可以正常的显示数据,查询单个数据id的值都是正确的。但修改用户时无法获取前端传过来的userDao中的userIdStr的值,因为上面的getUserIdStr()不能获取userIdStr的值(如果id没有值)。
3.控制用户新建数据时id的长度。兜兜转转觉得这个最方便。
温馨提示:以后设计表字段时尽量用varchar类型。
原文链接:https://blog.csdn.net/sunmerZeal/article/details/80844843