项目场景:
最近做了一个需求做编辑的反显,前端通过id查询一条数据,发现数据库数据返回的long类型的id跟前端显示不一致
问题描述
可以看到前端新增时候传的id跟返回的id不一样,后面几位全部都是0
然后我拿着反的id去数据库查发现没这条数据,那这个id是怎么来的??
通过打断点看到控制台里面的数据和数据库的数据是一致但是返回的数据就是不对
在分页查询时,服务端会将返回的R对象进行json序列化,转换为json格式的数据,而员工的ID是一个Long类型的数据,而且是一个长度为 19 位的长整型数据, 该数据返回给前端是没有问题的。
数据库的数据
那么具体的问题出现在哪儿呢?
原因分析:
问题实际上, 就出现在前端JS中, js在对长度较长的长整型数据进行处理时, 会损失精度, 从而导致提交的id和数据库中的id不一致。
解决方案:
在返回的id字段上加上@JsonFormat(shape = JsonFormat.Shape.STRING)注解就完美解决啦;
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long productId;
这时候我们再来看swagger的测试效果
总结:@JsonFormat 用来表示json序列化的一种格式或者类型,shap表示序列化后的一种类型,加上这个注解以后这个字段转为string格式的返给前端就不会造成Js截取的失精问题了!