西安火车站网站建设,it服务商,北京到广州列车时刻表,济南建网站价格Java列表查询Long到前端转换出错 问题描述排查思路思路一#xff1a;SQL问题思路二#xff1a;Long类型转换出错 解决方法 问题描述
做了一个列表查询功能#xff0c;本来不应该有啥大问题的#xff0c;但是往往事与愿违。 诶#xff0c;你越觉得不可能出问题#xff0c… Java列表查询Long到前端转换出错 问题描述排查思路思路一SQL问题思路二Long类型转换出错 解决方法 问题描述
做了一个列表查询功能本来不应该有啥大问题的但是往往事与愿违。 诶你越觉得不可能出问题他就越出问题了就是玩。 报了一个“Duplicate keys detected: ‘7918899278313947000’”的问题ID重复了 我打开F12一看卧槽真的重复了 重复了那就找问题呗
排查思路
思路一SQL问题
像这种主键重复第一反应就是是不是SQL写的不对尤其是多表关联插叙。 于是排查了一顿SQL发现没啥问题啊巴对 直到返回前端的page对象中ID都是不重复的。 但是到了前端之后ID就变一样了这。。。。
思路二Long类型转换出错
经过对比发现一个问题就是前16位是一样的后3位都变成0了。 于是又有了一个想法就是在数据传输的过程中Long类型转化出错了导致后三位都变成0了。
那就朝着这个方向继续努力
考大家基础知识的时间到了。 Java的八大基本数据类型 整型byte(1字节8bit)、short(2字节16bit)、int(4字节32bit)、long(8字节64bit) 字符型char(2字节16bit) 浮点型float(4字节32bit)、double(8字节64bit) 布尔型boolean(仅有两个值true, false变量初始化默认值false 在Java中long类型是一种表示大整数的数据类型。它使用64位8字节的存储空间可以表示的整数范围从-9223372036854775808到9223372036854775807。
long类型的长度最长为19刚好数据库id字段的长度就是19但是可以看到显然还不到最大值如果超过最大值数据入库的时候就会报错也不会成功入库
但是还有一个long类型的字段长度为16传到前端后数据一致这是不是说明long类型达到19后会出现意想不到到的错误导致值发生变化那就简单粗暴一点在后端直接转化成String类型就好了。
解决方法 找到实体类在id的字段上fastjson的JSONField注解转化成字符串就OK了。 import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.ToStringSerializer;JSONField(serializeUsing ToStringSerializer.class)private Long id;。 问题解决 打完收工