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

后端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.xdnf.cn/news/14962.html

相关文章:

  • 单例模式(饿汉模式,懒汉模式)
  • LeetCode 3306.元音辅音字符串计数2
  • 论文阅读|汽车虚拟环绕音响系统设计与实现策略的比较研究
  • Oracle存储过程导出数据到Excel:全面实现方案详解
  • C++笔记之使用bitset对uint32_t类型变量对位状态判断
  • Spring Cloud 企业项目技术选型
  • 华为泰山服务器重启后出现 XFS 文件系统磁盘“不识别”(无法挂载或访问),但挂载点目录仍在且无数据
  • 分布式接口幂等性的演进和最佳实践,含springBoot 实现(Java版本)
  • 前端规范化设计详解
  • JavaScript基础篇——第一章 JavaScript基础的认识
  • 《Java 反射全攻略1》
  • 【读代码】GLM-4.1V-Thinking:开源多模态推理模型的创新实践
  • 开源 python 应用 开发(四)python文件和系统综合应用
  • linux wsl2 docker 镜像复用快速方法
  • 分布式理论:CAP、Base理论
  • 无重叠区间问题
  • HDLBits刷题笔记和一些拓展知识(十一)
  • git-安装 Gerrit Hook 自动生成changeid
  • Java-Collections、Map
  • 力扣-136.只出现一次的数字
  • C语言宏替换比较练习
  • .NET9 实现对象深拷贝和浅拷贝的性能测试
  • C#使用Semantic Kernel实现Embedding功能
  • 自动化一次通过率
  • LLM探索的时代
  • 【web安全】SQLMap 参数深度解析:--risk 与 --level 详解
  • leetcode202.快乐数
  • 【数据结构】复杂度分析
  • 【王树森推荐系统】召回11:地理位置召回、作者召回、缓存召回
  • LeetCode 1248.统计优美子数组