问题出现:后端的Java Bean的id属性是用的Long类型对应数据库主键使用bigint类型,当使用JSON方式传递该数据给前端时,前端接收到的数据末尾会变成0。(发生的精度丢失问题) 问题原因:Java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值),导致Id最后几位直接变成了0。
前端接收打印:
文章来源:https://www.toymoban.com/news/detail-577834.html
解决方案1(后端):将后端的id变成字符串类型,前端以字符串的方式接收就不会有精度丢失
解决方案2(前端):前端方案1前端引入 json-bigint,
npm install json-bigint
解决方案3(前端):在axios封装的地方,transformResponse 在传递给 then/catch 前,允许修改响应数据。
文章来源地址https://www.toymoban.com/news/detail-577834.html
修改axios的源码,在node_modules/axios/lib/default.js中找到transformResponse 将其内容改为:
transformResponse: [function transformResponse(data) {
/*eslint no-param-reassign:0*/
if (typeof data === 'string') {
try {
data = JSON.parse(data);
} catch (e) { /* Ignore */ }
}
return data;
}],
解决方案4(前端):
后台传到前台时,Long类型数据,转为String类型。可以直接操作传回的对象数据,toString()该long类型数据。(推荐)
到了这里,关于后端Long类型传到前端精度丢失的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!