后端Long类型传到前端精度丢失的问题

问题出现:后端的Java Bean的id属性是用的Long类型对应数据库主键使用bigint类型,当使用JSON方式传递该数据给前端时,前端接收到的数据末尾会变成0。(发生的精度丢失问题)
问题原因:Java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值),导致Id最后几位直接变成了0。
 

 

 前端接收打印:

后端Long类型传到前端精度丢失的问题_第1张图片

 解决方案1(后端):将后端的id变成字符串类型,前端以字符串的方式接收就不会有精度丢失


解决方案2(前端):前端方案1前端引入 json-bigint,

   npm install json-bigint

解决方案3(前端):在axios封装的地方,transformResponse 在传递给 then/catch 前,允许修改响应数据。

后端Long类型传到前端精度丢失的问题_第2张图片

 修改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类型数据。(推荐)

你可能感兴趣的:(js,前端)