iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >解决前后端交互数据出现精度丢失的多种方式
  • 1010
分享到

解决前后端交互数据出现精度丢失的多种方式

2024-04-02 19:04:59 1010人浏览 泡泡鱼
摘要

目录问题:情景复现:解决方式1.前端解决2.后端解决注意:问题: 发送ajax请求,请求后端接口创建订单并且返回订单号出现订单号精度丢失的情况 情景复现: 前端发送请求到后端接口

问题:

发送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,为了不影响后端业务尽可能使用前端的方式解决

以上就是解决前后端交互数据出现精度丢失的多种方式的详细内容,更多关于前后端数据交互精度丢失的资料请关注编程网其它相关文章!

--结束END--

本文标题: 解决前后端交互数据出现精度丢失的多种方式

本文链接: https://www.lsjlt.com/news/147491.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作