Long类型字段在前后端传值问题

文章目录

  • 抛出问题
  • 解决问题
    • 解决方法1:
    • 解决方法2:
    • 解决方法3:
    • <font color=gree>解决方法:4


在这里插入图片描述



抛出问题


Java 服务端如果直接返回 Long 整型数据给前端,Javascript 会自动将其转换为 Number 类型(注:此类型为双精度浮点数,表示原理与取值范围等同于 Java 中的 Double)。


Long 类型能表示的最大值是 2 63 2^{63} 263 - 1,在取值范围之内,超过 2 53 2^{53} 253(9007199254740992)的数值转化为 JavascriptNumber 时,数值会产生精度损失。

扩展说明,在 Long 取值范围内,任何 2 的指数次的整数都是绝对不会存在精度损失的,所以说精度损失是一个概率问题。若浮点数尾数位与指数位空间不限,则可以精确表示任何整数,但很不幸,双精度浮点数的尾数位只有52 位。




解决问题

解决方法1:

对于需要使用超大整数的场景,服务端使用 String 字符串类型返回。

服务端与前端交互使用 String 类型,这样就不会存在精度损失问题,与数据库里是的Long 类型主键交互记得转换下就行。
(这里不建议用字符型做主键,会有索引上的性能损耗)


解决方法2:

如果使用的是 Jackson 序列包的话, 在 id 值上加如下注解.

/**
 * 用户ID
 * 将Long类型数字进行json格式转化时,转成String格式类型
 */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;

如果使用的是 fastjson序列包的话, 在 id 值上加如下注解.

 @JSONField(serializeUsing = String.class)
 private Long id;

缺点就是 需要在每个类的对应属性上加, 如果类很多的话,工作量还是蛮大的.


解决方法3:

因为服务端与前端交互都是通过 Json 格式的数据交互的,所以我们这要做一个全局配置告诉我们的JSON转换器,再遇到Long类型的属性时自动转换为String类型即可。

@Configuration
public class JacksonConfig {

    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder){
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        
        // 全局配置序列化返回 JSON 处理
        SimpleModule simpleModule = new SimpleModule();
       
        //JSON Long ==> String
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        return objectMapper;
    }
}

解决方法:4

Springboot项目,在配置文件中添加一句即可。

spring.jackson.generator.write_numbers_as_strings = true



在这里插入图片描述



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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

arcgis pro植被冠层分析及单木识别

测试正射影像和点云数据介绍(文末分享):点云数据每平方米包含 0.5-1 个点。准备的课程如下;地面、水、桥或未分类。两个数据的最小单位覆盖面积为 2.5 x 2.5 公里。两个数据均位于 SWEREF 99 TM 坐标系中。正射影像数据由 RGBI(红、绿、蓝和近红外)波段组成。两个数据的空…

提交数据加快百度搜索引擎收录

百度站长工具做了更新&#xff0c;百度收录的地址分享如下&#xff0c;新站点提交后&#xff0c;可以加快百度收录。 普通收录_加快网站内容抓取&#xff0c;快速提交数据工具_站长工具_网站支持_百度搜索资源平台普通收录工具可实时向百度推送数据&#xff0c;创建并提交site…

【Emgu CV教程】9.5、形态学常用操作之形态学梯度

文章目录 一、相关概念1.什么叫形态学梯度2.形态学梯度的函数 二、演示1.原始素材2.代码3.运行结果 一、相关概念 1.什么叫形态学梯度 形态学梯度&#xff0c;就是用膨胀的原始图像减去腐蚀的原始图像&#xff0c;所以它的特性就是去除前景物体的内部区域&#xff0c;只得到前…

Docker 安装部署 SqlServer 数据库

Docker 安装部署 SqlServer 数据库 背景&#xff1a; ​ 最近在开发数据中台数据集成模块&#xff0c;需要对接大量的数据做测试&#xff0c; 由于SqlServer 下载安装会耗费大量时间&#xff0c;所以采用 Docker 安装 Sqlserver 的方式部署数据库。 1、拉去 sqlserver 镜像 …

【汇编】#3 8086与数据有关的寻址方式

文章目录 操作码与操作数1. 8086处理器的与数据有关的寻址方式1.1 立即数寻址方式1.2 寄存器寻址方式 2. 有效&#xff08;偏移&#xff09;地址&#xff08;effective address&#xff0c;EA&#xff09;与缺省段寄存器选择tips:段跨越前缀2.1 直接寻址tips:直接寻址与立即寻址…

Android14之解决报错:No module named sepolgen(一百九十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

1.1 课程架构介绍:STM32H5信息安全特性概览

1.1 课程架构介绍&#xff1a;STM32H5信息安全特性概览 1. 概述 开发者在打造嵌入式系统时&#xff0c;安全和性能是产品开发设计的考量重点。为实现这一目标&#xff0c;ST推出了STM32H5系列&#xff0c;该系列作为微控制器新标杆面向工业应用市场&#xff0c;将为用户带来更…

(每日持续更新)jdk api之StreamTokenizer基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

Linux -- 线程概念和控制

一 什么是线程 1.1 线程的引出 我们开始理解一下Linux中的线程。我们以前说过&#xff0c;一个进程被创建出来&#xff0c;要有自己对应的进程PCB的&#xff0c;也就是 task_struct&#xff0c;也要有自己的地址空间、页表&#xff0c;经过页表映射到物理内存中。所以在进程角…

Docker:构建镜像,运行springboot项目、服务器开启虚拟内存

文章目录 构建镜像&#xff0c;运行项目开启虚拟内存构建&#xff0c;运行 构建镜像&#xff0c;运行项目 开启虚拟内存 我们自己购买服务器一般内存就2g&#xff0c;是不够用的&#xff0c;所以要开启虚拟内存。 创建目录 mkdir /file创建虚拟内存 dd if/dev/zero of/fi…

java数据结构与算法刷题-----LeetCode46. 全排列

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 暴力回溯2. 分区法回溯 1. 暴力回溯 解题思路&#xff1a;时…

ASP.NET-Server.HtmlEncode

目录 背景: 1.转义特殊字符&#xff1a; 2.防止跨站脚本攻击&#xff08;XSS&#xff09;&#xff1a; 3.确保输出安全性&#xff1a; 4.保留原始文本形式&#xff1a; 5.与用户输入交互安全&#xff1a; 实例说明: 不用Server.HtmlEncode 效果展示: 用Server.HtmlEnc…

蜘蛛矩阵系统:一个人如何运营上百个账号,方法在这里!

实体店若想在线上吸引客源&#xff0c;绝不能仅仅满足于拍摄几段短视频。现今的市场竞争已经迫使许多商家采用更先进的策略蜘蛛矩阵系统来进行获客。想象一下&#xff0c;你的竞争对手正在运用这一系统&#xff0c;他们开通有一百个账号&#xff0c;每天可以发布一百条的视频&a…

vue3 表单数据发生改变时,切换路由给我提示

一、需求说明 1、当表单数据未发生改变时&#xff0c;save和discard按钮不可点击&#xff0c;路由切换时无提示&#xff08;如下图所示&#xff09; 2、当表单数据发生改变时&#xff0c;save和discard按钮可点击&#xff0c;路由切换时出现提示&#xff08;如下图所示&#x…

【C语言_C语言语句_复习篇】

目录 一、C语言的语句有哪些 1.1 空语句 1.2 表达式语句 1.3 函数调用语句 1.4 复合语句 1.5 控制语句 二、分支语句&#xff08;两种&#xff09; 1.1 if语句 1.1.1 普通分支语句(if、if_else) 1.1.2 嵌套if语句 1.1.3 else嵌套if两种写法的比较 1.1.4 else悬空问题 1.1.…

西贝柳斯Sibelius2024免费专业的乐谱制作软件

西贝柳斯Sibelius是一款专业的乐谱制作软件&#xff0c;广泛应用于音乐教育、电影配乐、管弦乐团、合唱团等领域。以下是对Sibelius软件的详细介绍&#xff1a; sibelius2024版本下载如下&#xff1a; https://wm.makeding.com/iclk/?zoneid47077 一、功能 Sibelius具有强大…

Promise搞不懂,看这篇就明白了

Promise搞不懂&#xff0c;看这篇就明白了 Promise 是异步编程的一种解决方案&#xff0c;实质上Pomise是个对象&#xff0c;用来封装异步操作&#xff0c;可以更加优雅的书写复杂的异步任务。 具体来看他是怎么工作的&#xff1a; Promise语法格式 new Promise(function (re…

学习SSM的记录(八)-- SSM整合项目《任务列表案例》

前端程序搭建和运行 项目预览 接口分析 1.学习计划分页查询 需求&#xff1a;查询对应数据页数据 uri&#xff1a;schedule/{pageSize}/{currentPage} 请求方式&#xff1a;get 响应数据&#xff1a;json {"code":200,"flag":true,"data"…

基于java+springboot+vue实现的高校社团管理系统(文末源码+Lw+ppt)23-419

摘 要 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对高校社团的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”…

【C++算法模板】字典树,超详细注释带例题讲解

文章目录 0&#xff09;概述1&#xff09;数据结构2&#xff09;插入操作3&#xff09;查询操作4&#xff09;完整代码1. 字符数组2. 字符串 视频链接&#xff1a;F06 字典树(Trie) 0&#xff09;概述 是快速插入和查询字符串的多叉树结构&#xff0c;根节点编号为0&#xff0…