当前位置: 首页 > news >正文

后端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.dtcms.com/a/270642.html

相关文章:

  • 解锁DevOps潜力:如何选择合适的CI/CD工作流工具
  • 【Linux | 网络】socket编程 - 使用UDP实现服务端向客户端提供简单的服务
  • python:ImportError: cannot import name ‘ParameterSource‘ from ‘click.core‘
  • Linux 中的 .bashrc 是什么?配置详解
  • ESP32的OTA升级详解:2. OTA低层组件app_update介绍
  • 增强检索知识库系统1
  • 模型内部进行特征提取时,除了“减法”之外,还有哪些技术
  • 线程池与并发工具:优化多线程执行!
  • [特殊字符]【跨数据库支持】SQL 秒转 ArkTS 实体!HarmonyOS 开发者的数据库适配神器 gotool.top
  • Node.Js是什么?
  • AI+智慧园区 | 事件处置自动化——大模型重构园区治理逻辑
  • 【图像处理基石】如何检测到画面中的ppt并对其进行增强?
  • 洛谷 P1104 生日---排序
  • Android Studio 2024,小白入门喂饭级教程
  • 滑动窗口的初步了解
  • 记录一下:成功部署k8s集群(部分)
  • 【音视频】TS协议介绍
  • 搭建商城系统
  • 【Java】【力扣】3.无重复字符的最长字串
  • Flutter基础(前端教程⑧-数据模型)
  • Elasticsearch RESTful API入门:基础搜索与查询DSL
  • C#项目 在Vue/React前端项目中 使用使用wkeWebBrowser引用并且内部使用iframe网页外链 页面部分白屏
  • 数据管理新范式:基于Docker的私有云存储系统构建指南
  • 十一、K8s细粒度权限管理RBAC
  • 异步进阶:C#的Task.WhenAll——如何开启多个异步任务
  • ReactNative【实战系列教程】我的小红书 6 -- 购物(含商品搜索、商品分类、商品列表)
  • 编写产品需求文档:黄历日历小程序
  • [Leetcode] 预处理 | 多叉树bfs | 格雷编码 | static_cast | 矩阵对角线
  • React面试高频考点解析
  • LeetCode Hot 100 搜索二维矩阵 II