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