后端id设置long类型时,传到前端,超过19位最后两位为00

文章目录

  • 一、前言
  • 二、问题描述
    • 2.1、问题背景
    • 2.2、问题示例
  • 三、解决方法
    • 3.1、将ID转换为字符串
    • 3.2、使用@JsonSerialize注解
    • 3.3、使用@JsonFormat注解

一、前言

在后端开发中,我们经常会遇到需要将ID作为标识符传递给前端的情况。当ID为long类型时,如果该ID超过19位,前端JavaScript在处理时可能会遇到精度问题,导致最后两位变成00。本文将探讨这一问题的原因以及解决方案。

二、问题描述

2.1、问题背景

在Java中,Long类型的取值范围是-92233720368547758089223372036854775807(即-2^642^64-1)。然而,JavaScript中的Number类型取值范围是-90071992547409929007199254740991(即-2^532^53-1)。当long类型的ID超过JavaScript的Number类型范围时,就容易出现精度丢失的问题。

2.2、问题示例

在这里插入图片描述

在这里插入图片描述

响应报文Long类型的最后两位变成了00

三、解决方法

3.1、将ID转换为字符串

为了避免精度丢失,我们可以在后端将long类型的ID转换为字符串。这样,无论ID的长度如何,前端都可以正确地接收和处理。
在这里插入图片描述

3.2、使用@JsonSerialize注解

我们可以使用@JsonSerialize注解来指定ID字段的序列化方式。通过ToStringSerializer类,我们可以确保ID在序列化时被转换为字符串。

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class Student {@JsonSerialize(using = ToStringSerializer.class)private long id;private String name;
}

在这里插入图片描述
注意:
添加@JsonSerialize注解后,虽然实体类中id类型是Long,但是返回值中是String类型。

在这里插入图片描述

3.3、使用@JsonFormat注解

可以使用@JsonFormat(shape = JsonFormat.Shape.STRING)将字段转换为String类型

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class Student {@JsonFormat(shape = JsonFormat.Shape.STRING)private long id;private String name;
}

响应报文示例:
在这里插入图片描述

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

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

相关文章

SpringAI学习笔记-MCP客户端简单示例

MCP客户端是AI与外部世界交互的桥梁。在AI系统中,大模型虽然具备强大的认知能力,却常常受限于数据孤岛问题,无法直接访问外部工具和数据源。MCP协议应运而生,作为标准化接口解决这一核心挑战。该协议采用客户端-服务端架构&#x…

postgresql|数据库|系统性能监控视图pg_stat与postgresql数据库的调优(备忘)

一、 写作初衷 通常,我们使用navicat这样的数据库图形管理工具,只能看到用户层面的表,视图,而系统层面的表,视图,函数是无法看到的,这些表,视图和函数好像也可以称之为内模式;而这些视图,函数的作用是非常大的,其中pg_stat 族系统视图可以得到数据库的详细运行信息…

网络安全护网实战:攻击手段解析与防御策略

在网络安全领域,护网行动中对各类攻击方式和漏洞原理的掌握至关重要。本文将详细解析常见的攻击方式及其背后的漏洞原理,帮助大家提升护网技能。一、常见攻击方式及漏洞原理1. SQL注入漏洞• 定义:将恶意的数据库语句注入到后台数据库去执行&…

使用alist+RaiDrive+webdav将百度夸克网盘变为本地电脑磁盘方法教程

由于每天都要操作网盘不下十几次,频繁启动网盘比较麻烦。 使用百度夸克网盘的webdav服务可以将百度夸克网盘挂载到本地电脑上,就像操作本地电脑硬盘一样操作网盘,非常方便。我们以alistraidrive为例演示。 首先打开百度网盘pan.baidu.com&a…

C# 入门学习教程(二)

文章目录一、操作符详解1、操作符概览2、操作符的本质3、操作符的优先级4、同级操作符的运算顺序5、 各类操作符的示例二、表达式,语句详解1. 表达式的定义2. 各类表达式概览3. 语句的定义4. 语句详解一、操作符详解 C# 中的操作符是用于执行程序代码运算的符号&am…

Linux内核深度解析:IPv4策略路由的核心实现与fib_rules.c源码剖析

深入探索Linux网络栈的规则引擎,揭秘策略路由如何通过多级路由表实现复杂流量控制 在Linux网络栈中,路由决策远不止简单的目的地址匹配。策略路由(Policy Routing)允许根据源地址、TOS值、端口等复杂条件选择不同的路由路径。本文将深入剖析实现这一功能的核心源码——net/…

【UE5】虚幻引擎的运行逻辑

UE5的运行逻辑可以分为引擎启动流程和游戏运行流程两个部分。引擎启动流程一、平台入口&引擎主流程初始化1、系统入口不同的平台会有不同的入口。在Windows平台,入口是Launch模块下的\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp文件中的W…

大数据学习1:Hadoop单机版环境搭建

1.基础知识介绍 Flume采集日志。Sqoop采集结构化数据,比如采集数据库。 存储到HDFS上。 YARN资源调度,每台服务器上分配多少资源。 Hive是基于Hadoop的一个数据仓库工具,提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行…

深入理解PHP中的命名空间和自动加载机制

首先,让我们来讨论命名空间。PHP的命名空间是一种对代码进行逻辑分组的机制,它允许开发者将函数、类和常量封装在不同的命名空间中。这样做的好处在于可以避免全局范围内的名称冲突。例如,你可能在你的项目中使用了一个名为"Database&qu…

学习:JS[3]数组的增删改查+函数+作用域

一.操作数组1.改2.增arr.push(新增的内容):将一个或多个元素添加到数组的结尾arr.unshift(新增的内容):方法将一个或多个元素添加到数组的开头,并返回该数组的长度3.删除arr.pop():方法从数组中删除最后一个元素,不带参数,并返回元素的值arr.shift():方法从数组中删除第一个元素…

从0到1搭建ELK日志收集平台

ELK是什么 ELK 是指 Elasticsearch、Logstash 和 Kibana 这三种工具的组合,通常用于日志分析、数据搜索和可视化。它们分别承担不同的功能,形成了强大的数据处理和分析平台: Elasticsearch:一个分布式搜索引擎,擅长实时…

Qt:图片切割

void MainWindow::on_action_slice_triggered() {QDialog *dialog new QDialog(this);dialog->setWindowTitle("切割");dialog->setFixedSize(200, 150);QVBoxLayout *vbox new QVBoxLayout;QHBoxLayout *hbox new QHBoxLayout;QLabel *label new QLabel(&…

BabelDOC,一个专为学术PDF文档设计的翻译和双语对比工具

你是否也有这样的困境,面对一篇学术论文,即使英语水平不错,仍需反复查词典,尤其是遇到专业术语和复杂长句,翻译软件又常常不能很好地处理学术PDF的排版,导致翻译结果混乱不堪。 现在,解决你烦恼…

Python之面向对象和类

一.类1.类的定义:class 类名:“”“注释 ”“”pass2.实例的创建:实例 类名(parameterlist)parameterlist:定义类时__init__()方法的参数,如果该方法只有一个self参数,parameterlist可以省略class Goose()…

【力扣 困难 C】329. 矩阵中的最长递增路径

目录 题目 解法一 题目 待添加 解法一 int max(int a, int b) {return a > b ? a : b; }int search(int** matrix, int m, int n, int i, int j, int (*dp)[n]) {if (dp[i][j]) {return dp[i][j];}int len 0;if (i > 0 && matrix[i - 1][j] > matrix[i]…

Blueprints - UE5的增强输入系统

一些学习笔记归档;增强输入系统由两部分组成:Input Action和Input Mapping ContextInput Action是输入操作的映射(操作中比如有移动、跳跃等),Input Mapping Context是输入情境的映射(对各种操作的具体按键…

Python 【技术面试题和HR面试题】➕ 动态类型、运算符、输入处理及算法编程问答

1.技术面试题 (1)TCP与UDP的区别是什么? 答: ①连接性:TCP 面向连接,3次握手及4次挥手,建立端到端的虚链路像;UDP 无连接,直接发送,无需预先建立连接 。 ②传…

etcd-cpp-apiv3 二次封装

接口介绍头文件#include <etcd/Client.hpp> #include <etcd/KeepAlive.hpp> #include <etcd/Response.hpp> #include <etcd/SyncClient.hpp> #include <etcd/Value.hpp> #include <etcd/Watcher.hpp>下面从功能介绍几个类的概念Value &…

【网络与系统安全】强制访问控制——Biba模型

一、模型定义与目标 提出背景&#xff1a;1977年由Ken Biba提出&#xff0c;是首个完整性安全模型&#xff0c;与BLP模型形成对偶&#xff08;BLP关注机密性&#xff0c;Biba关注完整性&#xff09;。核心目标&#xff1a;防止低完整性信息污染高完整性信息&#xff0c;避免未授…

从架构抽象到表达范式:如何正确理解系统架构中的 4C 模型20250704

&#x1f9e9; 从架构抽象到表达范式&#xff1a;如何正确理解系统架构中的 4C 模型&#xff1f; “4C”到底是架构的组成结构&#xff0c;还是架构图的表现方式&#xff1f;这类看似细节的问题&#xff0c;其实直击了我们在系统设计中认知、表达与落地之间的张力。 &#x1f5…