解決前后端交互數(shù)據(jù)出現(xiàn)精度丟失的多種方式
問(wèn)題:
發(fā)送Ajax請(qǐng)求,請(qǐng)求后端接口創(chuàng)建訂單并且返回訂單號(hào)出現(xiàn)訂單號(hào)精度丟失的情況
情景復(fù)現(xiàn):
前端發(fā)送請(qǐng)求到后端接口
我們前端打印訂單號(hào)到控制臺(tái)查看,前端返回訂單號(hào):1510826214531666000
查看數(shù)據(jù)庫(kù)訂單號(hào):1510826214531665920
比較2個(gè)單號(hào)區(qū)別
可以明顯看出后面幾位數(shù)據(jù)丟失,這樣就存在一個(gè)問(wèn)題,我前端通過(guò)該訂單號(hào)無(wú)法獲取到正確的訂單
數(shù)據(jù),就會(huì)出現(xiàn)訂單已經(jīng)保存成功但是查詢不到的問(wèn)題
解決方式
問(wèn)題出在前端的Long長(zhǎng)度,沒(méi)有后端Long的長(zhǎng)度長(zhǎng)這樣,前端獲取到數(shù)據(jù)后會(huì)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,發(fā)現(xiàn)長(zhǎng)度大于前端的Long最大長(zhǎng)度就會(huì)精度丟失,那么我們應(yīng)該直接讓他返回字符串的數(shù)據(jù)不讓他轉(zhuǎn)換!
那么就會(huì)有2種解決方案
1.前端解決
請(qǐng)求的時(shí)候添加以下代碼,這樣前端接受就不會(huì)進(jìn)行轉(zhuǎn)化
{ transformResponse: [ function (data){ return data; } ] }
發(fā)送請(qǐng)求我們?cè)诳聪?打印返回的訂單查看
數(shù)據(jù)庫(kù)數(shù)據(jù)
可以看出沒(méi)有丟失精度
前端解決丟失完成
2.后端解決
我們更改后端實(shí)體類的值
通過(guò)@JsonFormat值把Long類型的值轉(zhuǎn)成String類型的值
@JsonFormat(shape =JsonFormat.Shape.STRING ) private Long orderId;// id
然后重啟后端代碼測(cè)試下,該接口由于后端返回的類型就是Long所以沒(méi)辦法使用這個(gè)方案
注意:
如果后端返回的是對(duì)象那么Id是Long類型的話可以通過(guò)@JsonFormat把對(duì)象的id從Long類型的轉(zhuǎn)換成String類型那么前端也不會(huì)出現(xiàn)精度丟失,如果單獨(dú)返回的數(shù)據(jù)類型一開(kāi)始就是Long那么只能通過(guò)前端的方法解決
例如:
后端返回類型是Long那么只能改前端,不然就要更改后端返回為String,為了不影響后端業(yè)務(wù)盡可能使用前端的方式解決
以上就是解決前后端交互數(shù)據(jù)出現(xiàn)精度丟失的多種方式的詳細(xì)內(nèi)容,更多關(guān)于前后端數(shù)據(jù)交互精度丟失的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS對(duì)象序列化成json數(shù)據(jù)和json數(shù)據(jù)轉(zhuǎn)化為JS對(duì)象的代碼
這篇文章主要介紹了JS對(duì)象序列化成json數(shù)據(jù)和json數(shù)據(jù)轉(zhuǎn)化為JS對(duì)象的代碼,需要的朋友可以參考下2017-08-08javascript forEach通用循環(huán)遍歷方法
循環(huán)遍歷一個(gè)元素是開(kāi)發(fā)中最常見(jiàn)的需求之一,那么讓我們來(lái)看一個(gè)由框架BASE2和Jquery的結(jié)合版本吧.2010-10-10分離與繼承的思想實(shí)現(xiàn)圖片上傳后的預(yù)覽功能:ImageUploadView
本文要介紹的是網(wǎng)頁(yè)中常見(jiàn)的圖片上傳后直接在頁(yè)面生成小圖預(yù)覽的實(shí)現(xiàn)思路,考慮到該功能有一定的適用性,于是把相關(guān)的邏輯封裝成了一個(gè)ImageUploadView組件,實(shí)際使用效果可查看下一段的git效果圖2016-04-04一種Javascript解釋ajax返回的json的好方法(推薦)
下面小編就為大家?guī)?lái)一篇一種Javascript解釋ajax返回的json的好方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06JS實(shí)現(xiàn)勻速與減速緩慢運(yùn)動(dòng)的動(dòng)畫(huà)效果封裝示例
這篇文章主要介紹了JS實(shí)現(xiàn)勻速與減速緩慢運(yùn)動(dòng)的動(dòng)畫(huà)效果,結(jié)合實(shí)例形式分析了JavaScript封裝結(jié)合定時(shí)器的頁(yè)面元素動(dòng)態(tài)變換效果動(dòng)畫(huà)相關(guān)操作技巧,需要的朋友可以參考下2018-08-08bootstrap Table服務(wù)端處理分頁(yè)(后臺(tái)是.net)
這篇文章主要為大家詳細(xì)介紹了bootstrap Table服務(wù)端處理分頁(yè),后臺(tái)是.net,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10用js寫(xiě)“算24”游戲的思路分析與實(shí)現(xiàn)代碼
“算24”是一種游戲,小時(shí)候玩過(guò),就是一副撲克,把大王,小王除掉,A算1點(diǎn)J,Q,K都算10點(diǎn)。任意抽4個(gè)牌,可以運(yùn)用+-*/()來(lái)進(jìn)行運(yùn)算,把最后結(jié)果等于24。2008-05-05使用webpack/gulp構(gòu)建TypeScript項(xiàng)目的方法示例
這篇文章主要介紹了使用webpack/gulp構(gòu)建TypeScript項(xiàng)目的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12js指定步長(zhǎng)實(shí)現(xiàn)單方向勻速運(yùn)動(dòng)
這篇文章主要為大家詳細(xì)介紹了js指定步長(zhǎng)實(shí)現(xiàn)單方向勻速運(yùn)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07JavaScript實(shí)現(xiàn)鼠標(biāo)滑過(guò)圖片變換效果的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)鼠標(biāo)滑過(guò)圖片變換效果的方法,涉及javascript控制鼠標(biāo)事件及樣式變換的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04