vue项目通过json-bigint在前端处理java雪花id过长导致失去精度问题

news2024/11/28 16:33:31

这里 我简单模仿了一个接口
在这里插入图片描述
这里 我单纯 返回一个long类型的雪花id
然后 前端 用 axios 去请求
在这里插入图片描述
大家知道 axios 会对请求数据做一次处理 而我们 data才是拿到我们java这边实际返回的东西 简单说 就是输出一下我们后端返回 的内容

这里 我们网络中显示的是 358661018680954880
在这里插入图片描述
但神奇的一幕 发生了 我们实际输出的是 358661018680954900
在这里插入图片描述
这个问题 我之前的文章也解释过 这叫 java雪花id超长 导致前端接受失去精度
因为 前端js的数字类型 number 最大容量小于 java的long
导致 无法负载的值被四舍五入了
我之前说过 后端解决 直接转字符串即可
但其实 前端也可以通过第三方插件 json-bigint来处理此问题
我们还是先安装依赖
终端输入

npm install json-bigint

在这里插入图片描述
然后 我们可以修改一下发送请求的代码

<script>
import axios from "axios";
import JSONbig from 'json-bigint';

export default {
  name: 'App',
  data(){
    return {
    }
  },
  created(){
    axios({
      url: '/books',
      headers: {
        // 可以根据需要设置请求头
      },
      // 使用transformResponse选项将响应数据进行自定义处理
      transformResponse: [(data) => {
        // 使用JSONbig对返回的数据进行处理
        return JSONbig.parse(data);
      }]
    }).then(res => {
      console.log(res.data);
    }).catch(error => {
      console.log(error);
    });
  },
}
</script>

简单说 就是 在axios的transformResponse中 用json-bigint提供的parse函数去处理一下
这样 我们返回的内容如果过程 他就会帮我们分段处理
在这里插入图片描述
放不下 他会帮我们分成数组
在这里插入图片描述
例如 一个对象中 id超长 那么 原来的id字段就会变成一个这样的数据 放不下就帮你分成两个数组下标 到时 你自己再拼合一下就好了

然后 我们想将数据传回给后端 我们可以先将他们处理成字符串
例如 我们将 then 函数中的内容改成这样

let id = res.data.c.join("");
console.log(id);

我们 拿到 c的数组
然后 将他拼成字符串
我们运行项目 看网络
在这里插入图片描述
然后看控制台
在这里插入图片描述
然后 这里一个知识点 BigInt js另一个种数字类型 而他的容量是要比Number大的
我们引入一下第三方依赖

npm install big-integer

然后 我们将代码改成这样

<script>
import axios from "axios";
import JSONbig from 'json-bigint';
import bigInt from 'big-integer';

export default {
  name: 'App',
  data(){
    return {
    }
  },
  created(){
    axios({
      url: '/books',
      headers: {
        // 可以根据需要设置请求头
      },
      // 使用transformResponse选项将响应数据进行自定义处理
      transformResponse: [(data) => {
        // 使用JSONbig对返回的数据进行处理
        return JSONbig.parse(data);
      }]
    }).then(res => {
      let id = res.data.c.join("");
      id = bigInt(id);
      console.log(id);
    }).catch(error => {
      console.log(error);
    });
  },
}
</script>

这里 我们用big-integer处理超长数字类型的数据
运行结果如下
在这里插入图片描述
这里这个value 就是我们要的东西了

但其实 如果你想把id还给后端 就不需要big-integer了
我们直接换字符串 后端的long 会自动转换的 例如 这里我们写个属性类
在这里插入图片描述
就一个字段 是个long类型的id字段
然后我在写个接口
接收前端传过来的 一个 属性类对象 就是只有一个long id字段的属性类的对象
在这里插入图片描述
然后 前端直接改成这样

<script>
import axios from "axios";
import JSONbig from 'json-bigint';
//import bigInt from 'big-integer';

export default {
  name: 'App',
  data(){
    return {
    }
  },
  created(){
    axios({
      url: '/books',
      headers: {
        // 可以根据需要设置请求头
      },
      // 使用transformResponse选项将响应数据进行自定义处理
      transformResponse: [(data) => {
        // 使用JSONbig对返回的数据进行处理
        return JSONbig.parse(data);
      }]
    }).then(res => {
      let id = res.data.c.join("");
      axios.post('/books', { id: id })
      .then(res => {
        console.log(res.data);
      })
      .catch(error => {
        console.log(error);
      });
    }).catch(error => {
      console.log(error);
    });
  },
}
</script>

这里 我们处理成字符串后 马上就调用 post请求 将字符串id仍会给了后端
那么 我们这个id是字符串类型的 而java属性类中是用 long接的
能行吗?
我们直接运行
在这里插入图片描述
前端控制台 可以看到传了一个对象 其中有一个字段 字符串的id
我们看java控制台
在这里插入图片描述
很明显 他已经自动帮我们 让字符串变成 long了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

离散数学 学习 之一阶逻辑的前束范式

敲重点 如果是蕴含式的前件要改变符号&#xff0c;后件不需要

springboot导入excel(POI)

POI官方文档 引入依赖 <!--POI--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId&…

FOXBORO FBM230 P0926GU 数字量控制模块

FOXBORO FBM230 P0926GU 数字量控制模块是用于工业自动化和过程控制系统的模块之一&#xff0c;用于处理数字量信号&#xff0c;例如开关状态、传感器状态等。这些模块广泛应用于各种工业领域&#xff0c;包括但不限于以下应用领域&#xff1a; 工业自动化&#xff1a;在工业自…

<Altium Designer> 将.DSN文件导入并转换成SchDoc文件

目录 01 使用向导方式导入.DSN 02 消除Unique Identifiers Errors 03 文章总结 大家好&#xff0c;这里是程序员杰克。一名平平无奇的嵌入式软件工程师。 本文主要是总结和分享将OrCAD Capture画的原理图文件(.DSN)导入到Altium Designer&#xff0c;转换成对应的原理图文件…

Linux(Centos7)中安装Docker和DockerCompose

一、安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支 持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频…

debug过程中,矩阵左乘右乘相关概念梳理

变换点或者变换向量 左乘 矩阵左乘通常是指对”目标点“进行左乘&#xff0c;即: A ′ R ∗ A AR*A A′R∗A 其中&#xff0c;A为原始3维点&#xff0c;表示一个3*1的列向量&#xff0c;R为33的旋转矩阵&#xff0c;A‘为变换后的点 B ′ T ∗ B BT*B B′T∗B 其中&#…

Oracle 游标子程序触发器

文章目录 一、游标1.隐式游标2.显示游标3.REF游标 二、子程序1.存储过程1.1 语法结构1.2 案例讲解 2.存储函数2.1 语法结构2.2 案例讲解 3.程序包 三、触发器1.触发器的基本讲解2.触发器的类型2.1 语句级触发器2.2 行级触发器2.3 限制行级触发器 一、游标 游标的作用&#xff…

基于微信小程序的语言课学习系统设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

windows nginx 本地部署访问静态资源zip文件 配置以及bug解决

步骤 配置nginx服务器以提供静态资源zip文件的访问可以按照以下步骤进行&#xff1a; 安装并配置Nginx&#xff1a;首先确保已正确安装和配置了Nginx服务器。你可以从Nginx官方网站下载和安装Nginx&#xff0c;然后根据操作系统的要求进行配置。 准备静态资源zip文件&#xf…

数学建模__线性规划Python实现

我使用到的是python库中scipy。 线性规划 #目标函数的系数 # min z 2x13x2-5x3 c np.array([-2,-3,5])#不等式限制条件的系数&#xff0c;转化为小于等于 # 2x1-5x2x3 < 10, x13x2x3<12 Aup np.array([[-2,5,-1],[-1,-3,-1]]) #必须是二维 #右侧系数 bup np.array(…

物联网网络安全:保护物理世界和数字世界的融合

我们正在见证数字技术如何成为我们日常生活和经济系统的一部分&#xff0c;从而提高福利并增强竞争力。尽管如此&#xff0c;新的尖端互联技术的迅速出现和采用也对政府、企业和整个社会构成了重大威胁。 长期以来&#xff0c;网络安全威胁一直是电影行业的一个现成的灵感来源&…

数据不小心泄露会有哪些风险?

数据不小心泄露会带来一系列严重的风险&#xff0c;可能导致客户隐私泄露、法律责任、财务损失等严重后果。安策对于这一现象进行解析&#xff0c;以下是一些可能会发生的风险&#xff1a; 业务风险&#xff1a;当敏感或个人身份信息(PII)不小心泄露时&#xff0c;可能会导致客…

java的JSR、JCP访问地址

JSRs&#xff08;Java Specification Requests&#xff09; &#xff1a;java规范请求 https://jcp.org/en/jsr/all JCP&#xff08;Java Community Process&#xff09;&#xff1a;java社区流程&#xff0c;即按照什么流程来开发java标准技术规范。 https://jcp.org/en/hom…

Minio入门系列【5】JAVA集成Minio之存储桶操作API使用详解

1 前言 1.1 官方文档和SDK 官方文档&#xff1a;https://min.io/docs/minio/kubernetes/upstream/index.html?refdocs-redirect SDK&#xff1a;https://github.com/minio/minio-java Minio 提供了多种语言的SDK&#xff0c;比如java、go、python等。JAVA开发平台可以选择JS…

【ubuntu】修改系统及硬件时间

Linux系统时间分为两种&#xff1a;系统时间&#xff08;S有stem Clock&#xff09;和硬件&#xff08;Realtime Clock&#xff0c;简称RTC&#xff09;时间。 上网找了好多教程&#xff0c;每次修改完后&#xff0c;不到几秒钟&#xff0c;时间又恢复成之前的时间了。 -------…

R300升级款无人车开发平台,助力开发者快速上手、高效验证算法

R300升级款是一款科研无人车开发平台&#xff0c;旨在为无人车开发者提供快速上手开发和高效验证算法的解决方案。该平台集成了多款无人车底盘&#xff0c;包括履带式、四轮差速、阿克曼、麦克纳姆轮底盘等&#xff0c;以满足不同形式和配置的需求&#xff0c;并搭载了RTK定位系…

1600*G. Special Permutation(构造找规律)

解析&#xff1a; 要求每两个数之间的差为2或3或4&#xff0c;首先想到分奇偶 但是奇偶两端的差太大&#xff0c;所以可以将一个反转&#xff0c;即将两端小的拼在中间。 但是 1、2之间为1&#xff0c;所以可以反转一下2&#xff0c;4 n小于3&#xff0c;不符题意 输出-1 即 7 …

计算机竞赛 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据疫…

基于uniapp开发 软盒APP系统源码 软件库系统源码 全开源

软盒APP前端-基于uniapp&#xff0c;一个开源的软件库系统 前端开源地址&#xff1a;软盒APP前端-基于uniapp: 软盒APP前端-基于uniapp (gitee.com) 更新说明 更新日期&#xff1a;2023.07.24 v1.0.8.23724 1.修复部分接口 2.删除根据标签获取软件列表接口&#xff0c;整合…

2023第十二届中国智能产业高峰论坛

大会主题报告 大模型时代的元宇宙 人工智能在智慧农业中的应用 算网系统 基于AI的电磁波信号语义分析与目标识别 知识增强大语言模型 从大模型到Al for Science 金融大模型重塑金融产业全链路 高端数控机床的创新发展 大数据智能专题论坛 Chace-KO:一片连通、综合、容纳、制衡…