解决前后端交互数据出现精度丢失的多种方式
问题:
发送Ajax请求,请求后端接口创建订单并且返回订单号出现订单号精度丢失的情况
情景复现:
前端发送请求到后端接口
我们前端打印订单号到控制台查看,前端返回订单号:1510826214531666000
查看数据库订单号:1510826214531665920
比较2个单号区别
可以明显看出后面几位数据丢失,这样就存在一个问题,我前端通过该订单号无法获取到正确的订单
数据,就会出现订单已经保存成功但是查询不到的问题
解决方式
问题出在前端的Long长度,没有后端Long的长度长这样,前端获取到数据后会对数据进行转换,发现长度大于前端的Long最大长度就会精度丢失,那么我们应该直接让他返回字符串的数据不让他转换!
那么就会有2种解决方案
1.前端解决
请求的时候添加以下代码,这样前端接受就不会进行转化
{ transformResponse: [ function (data){ return data; } ] }
发送请求我们在看下,打印返回的订单查看
数据库数据
可以看出没有丢失精度
前端解决丢失完成
2.后端解决
我们更改后端实体类的值
通过@JsonFormat值把Long类型的值转成String类型的值
@JsonFormat(shape =JsonFormat.Shape.STRING ) private Long orderId;// id
然后重启后端代码测试下,该接口由于后端返回的类型就是Long所以没办法使用这个方案
注意:
如果后端返回的是对象那么Id是Long类型的话可以通过@JsonFormat把对象的id从Long类型的转换成String类型那么前端也不会出现精度丢失,如果单独返回的数据类型一开始就是Long那么只能通过前端的方法解决
例如:
后端返回类型是Long那么只能改前端,不然就要更改后端返回为String,为了不影响后端业务尽可能使用前端的方式解决
以上就是解决前后端交互数据出现精度丢失的多种方式的详细内容,更多关于前后端数据交互精度丢失的资料请关注脚本之家其它相关文章!
相关文章
JS对象序列化成json数据和json数据转化为JS对象的代码
这篇文章主要介绍了JS对象序列化成json数据和json数据转化为JS对象的代码,需要的朋友可以参考下2017-08-08分离与继承的思想实现图片上传后的预览功能:ImageUploadView
本文要介绍的是网页中常见的图片上传后直接在页面生成小图预览的实现思路,考虑到该功能有一定的适用性,于是把相关的逻辑封装成了一个ImageUploadView组件,实际使用效果可查看下一段的git效果图2016-04-04一种Javascript解释ajax返回的json的好方法(推荐)
下面小编就为大家带来一篇一种Javascript解释ajax返回的json的好方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-06-06bootstrap Table服务端处理分页(后台是.net)
这篇文章主要为大家详细介绍了bootstrap Table服务端处理分页,后台是.net,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-10-10使用webpack/gulp构建TypeScript项目的方法示例
这篇文章主要介绍了使用webpack/gulp构建TypeScript项目的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-12-12
最新评论