Spring Boot接口返回Long类型的数据时丢失精度的全局处理

SpringBoot实战:3种方法解决JS处理Long类型精度丢失(含代码对比) 本文针对SpringBoot应用中JavaScript处理Long类型数据时出现的精度丢失问题,提供了三种实战解决方案。通过对比@JsonSerialize注解、全局ObjectMapper配置以及Fastjson2库替换三种方法的优缺点与适用场景,帮助开发者根据项目需求选择最佳策略,确保前后端数据交互的完整性与准确性。 阅读详情

1、问题

当实体类中的字段为Long类型时,通过Ajax请求返回给前段,在js中数据会丢失精度
在这里插入图片描述
直接通过postman请求或通过浏览器请求,看下响应则不会丢失精度
在这里插入图片描述

2、处理方式

1、使用@JsonSerialize注解

@JsonSerialize(using = ToStringSerializer.class)
private Long id;

2、使用@JsonFormat注解

@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long id;

3、全局配置ObjectMapper Bean

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

@Slf4j
@Configuration
public class JacksonConfig {
    /**
     * Jackson对象映射器
     * @param builder builder
     * @return ObjectMapper
     */
    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        try {
            // 将Long类型返回时修改为String类型
            builder.serializerByType(Long.TYPE, ToStringSerializer.instance);
            builder.serializerByType(Long.class, ToStringSerializer.instance);
        } catch (Exception e) {
            log.info("Serialization exception!");
        }
        return builder.build();
    }
}
给汽车芯片做‘体检’:手把手教你用IEC62380和SN29500估算功能安全失效率 本文详细介绍了如何使用IEC62380和SN29500标准估算汽车芯片的功能安全失效率,涵盖基础认知、方法论对比及实战计算。通过具体案例演示两种标准的应用流程,帮助工程师准确评估半导体器件的可靠性,确保符合ISO 26262标准要求。 阅读详情

相关推荐

TOPSIS与熵权法实战:从数学建模到Python实现(附国赛案例分析)

本文详细解析了TOPSIS(逼近理想解排序法)与熵权法在数学建模中的协同应用,并通过Python代码实现完整流程。文章以国赛案例为背景,从指标正向化、数据标准化、熵权法计算客观权重,到TOPSIS综合排序,手把手指导如何解决多指标决策问题,为数据分析与建模提供了一套可复用的实战工具箱。

weixin_29079643的博客 245

spring Boot处理返回给前端Long类型精度丢失

项目中采用springcloud Alibaba技术开发分布式系统,开发过程中采用雪花算法生成分布式Id,为Long类型,而Long类型返回给前端,会出现精度丢失问题。接下来我们主要了解下,如何快速的处理精度丢失的问题。

xiaoliu_alone的博客 4263

FPGA八股文(2)——笔试的FPGA问题汇总(持续更新)

常见FPGA笔试题的概念总结

居安士的博客 8908

后端传long类型数据到前端精度丢失问题

这是因为在 JavaScript 中,数字类型默认会被转换为双精度浮点数,而双精度浮点数的精度有限,只能精确表示 2 的 53 次方以内(即 Number.MAX_SAFE_INTEGER,约为 9 x 10^15)的整数

weixin_58724261的博客 6616

Profinet从站开发初体验:用p-net开源库和树莓派快速搭建一个IO设备模拟器

本文详细介绍了如何使用p-net开源库和树莓派快速搭建Profinet从站IO设备模拟器。从开发环境准备、p-net源码编译到设备模拟器功能实现,提供了全流程实战指南,帮助开发者快速掌握工业通信协议开发技巧,适用于工业自动化领域的设备互联测试与验证。

weixin_30384217的博客 383

21天教你学会PCIe专栏(14)--安全性考虑

1.1 定义安全性(Security):安全性是指保护系统免受未经授权的访问、攻击和破坏,确保数据的机密性、完整性和可用性。1.2 重要性数据保护:保护敏感数据,防止数据泄露和篡改。系统防护:防止恶意攻击,确保系统的稳定性和可靠性。合规性:满足行业标准和法律法规的要求,避免法律风险。用户信任:提高用户对系统的信任度,增强市场竞争力。通过今天的学习,你应该对PCIe安全性的重要性和常见威胁有了深入的了解,掌握了实施安全措施的方法和工具,以及安全开发的最佳实践。

xiaoheshang_123的博客 850

【java】Long类型返回到前端数值错误精度丢失

1.在对象字段上加注解 @JsonSerialize(using = ToStringSerializer.class) private Long id;

王佑辉的博客 1072

UltraScale系列底层结构(3)——URAM概述

在UltraScale+™ 器件中,除了我们在常规熟悉的BRAM资源以外,还额外提供了URAM(UltraRAM)资源。 UltraRAM 是一种单时钟同步操作的高密度存储器,每个 UltraRAM 块可存储 288 Kb 数据,配置为 4K x 72 位的存储单元,其容量是 Block RAM 的八倍。虽然 UltraRAM 内部使用单端口存储单元,但通过在一个时钟周期内顺序执行端口 A 和端口 B 的操作,实现了双端口功能。

apple_53311083的博客 2834

Spring Boot返回前端Long型丢失精度

spring cloud alibaba项目中long类型数据返回前端最后两位变成00,参考了很多博客最后这篇对此项目有效果: 解决办法之一就是让Javascript把数字当成字符串进行处理,对Javascript来说如果不进行运算,数字和字符串处理起来没有什么区别。但如果需要进行运算,只能采用其他方法,例如JavaScript的一些开源库 bignum、bigint等支持长整型的处理。在我们这个场景里不需要进行运算,且Java进行JSON处理的时候是能够正确处理long型的,所以只需要将数字转化..

zhangkang65的专栏 4458

Proxmox(pve)集群(4)存储(1)配置分布式存储ceph

它使用一种称为CRUSH(Controlled Replication Under Scalable Hashing)算法的数据分布算法来将数据均匀地分布在多个存储节点上,并确保数据的冗余和容错。它负责管理数据的分布、冗余和自动修复。PVE支持本地存储、LVM、NFS、iSCSI、CephFS、RBD、ZFS等存储方式,我这里使用两种存储方式,一种是通过ceph实现分布式存储,一种是通过truenas实现集中式存储。自我管理和自动恢复:Ceph具有自我管理的特性,可以动态地调整和优化存储集群的配置。

Monster✺◟(∗❛ัᴗ❛ั∗)◞✺的博客 2627

TIA博途WINCC的触摸屏VB脚本入门指南(嵌入式)

通过编写事件处理程序,您可以响应触摸屏元素的各种事件,并实现自定义的功能。本文将为您提供TIA博途WINCC触摸屏VB脚本的入门指南,帮助您了解基本的脚本编写和嵌入式开发。假设我们有一个名为"Button1"的按钮元素,当用户点击该按钮时,触发相应的事件处理程序,并在触摸屏上显示一条消息。然后回到触摸屏界面编辑器,在按钮元素的属性窗口中找到"按下"事件,并选择刚才创建的脚本文件作为事件处理程序。现在,当用户点击按钮时,触摸屏将执行相应的事件处理程序,并显示一条消息框,内容为"按钮被点击了!

CodeSageX的博客 4420

SpringBoot返回前端Long类型字段丢失精度问题及解决方案

本文针对Java服务端返回Long整型数据给前端时精度丢失问题,提出了两种解决方案,大家根据自己的需求选择食用,欢迎大家批评指正。

c739816555的博客 2409

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

五年经验,接口设计还返回Long类型字段?

前段时间有个同事问,集成环境服务是不是有bug,操作过程中提示音频不存在,后来经过排查发现是接口返回的Long音频id,js对Long类型有精度丢失问题。之前audioId是数据库的自增id,后来因为数据库分库分表,audioId采用了雪花算法生成,生成的audioId是17位,js中数字超过16位就会有精度丢失问题。可以看看数据库里面的audioId再看看前端展示的audioId。

爱琴孩的博客 545

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring Boot 处理 Long 类型的 json 数据,前端调用精度丢失,变成 00

问题描述 错误的ID,最后两位数都是0,即: 1152921504735848700, 但是,正确的是: 1152921504735848759, 遇到Long类型的数据,传送给前端遇到精度丢失的问题. 后端的订单号值比如1089713253179727872 传给前端 显示出来是1089713253179727900。 拿postman测试接口没有问题,查到的是正确的数据,原来是因为Long类型数据传给前端可能精度丢失,js中的数据类型不能包含所有的java long值。 这个问题真是在前后端连接的夹缝中

AI天才研究院 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Long类型后端到前端精度丢失问题

在后端开发中处理Long类型数据时,注意 JavaScript 的精度限制十分重要。通过配置 Jackson 的,可以让所有Long类型字段序列化为字符串,从而避免精度丢失的问题。Spring Boot 的自动化配置特性让我们无需手动调用,就能在全局范围内应用此配置,使得后端传递到前端的数据在大数值时也能准确无误。

qq_44199605的博客 2120

spring boot中使用@ResponseBody注解返回json时Long精度丢失

spring boot中使用@ResponseBody注解返回json时Long精度丢失 1.现象 对于Long 类型的数据,如果我们在Controller层通过@ResponseBody将返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度丢失...

chuanxuzheng1943的博客 1523

js long类型精度丢失_解决js处理Long类型丢失精度的问题

项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种。不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在获取数据时会丢失精度,从而造成数据的不准确,解决方式呢,就是在序列化时,会将Long类型的数据转化为String类型在使用Spring MVC默认的Jackson时,我们可以这么做:@Configura...

weixin_39638801的博客 1249

Spring Boot中接口数据字段为 Long 类型时,前端number精度丢失问题解决方案

不过,JavaScript中 Number 类型的安全整数范围是 -2^53 到 2^53 ,如果 Long 类型的值超出这个范围,在前端JavaScript处理时可能会出现精度丢失问题。例如,一个Java对象中有一个 Long 类型的属性 id ,值为 1234567890123L ,在返回的JSON中会表示为 {"id":1234567890123}。在Spring Boot中,当接口数据字段为 Long 类型时,返回页面的JSON中该字段通常会被序列化为数字类型。

quyunde的博客 963

解决js处理Long类型丢失精度的问题 jquery JSON.parse的问题

项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种。 不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在获取数据时会丢失精度,从而造成数据的不准确,解决方式呢,就是在序列化时,会将Long类型的数...

chuangweichang5471的博客 2122

Spring Boot返回前端Long型丢失精度 后两位 变成00

Spring Boot返回前端Long型丢失精度 后两位 变成00

weixin_49114503的博客 1329

long类型的id属性传到前端会精度丢失的解决方案

记录一个前段时间使用雪花算法时候遇到的坑。 场景大概是这样的: 我有一个设备信息实体类,设备id是 long 类型,映射到数据库中是一个设备表,主键id是 bigint 类型。id的生成策略是使用雪花算法。 使用postman调用接口,获取到的JSON是正常的 { "id": 1297873308628307970, ... //其他属性省略 } 但是到了前端那边id的值却变成了1297873308628300000 仔细一比较发现这两个数值还挺像的,只有后4位不一样,当时立马想到了是不是精度

czx2018的博客 4290

java 后端Long类型数据返回到前端精度丢失

问题简述 Java后端的Long类型数据,传到前端会出现精度丢失(位数一样,但数据不正确),比如后端返回的数据为17位:52525415252525248,前端会变成17位的52525415252525240。 虽然位数一致,但是数据不正确。 问题原因 对于前后台传参过程中的Long类型,JS内置有32位整数,而number类型的安全整数是53位。如果超过53位,则精度会丢失。如果后台传来一个64位的Long型整数,因为超过了53位,所以后台返回的值和前台获取的值会不一样。出现数据解析后不一致的问题

♨ 3814

springboot解决Long类型数据传入前端损失精度

之前在做springboot项目时遇到Long类型数据直接用@ResponseBody返回数据自动转换成json时,不做任何处理,而直接传给前端的话,在Long长度大于17位时会出现精度丢失的问题。之后使用自定义消息转化器全部转为String解决。代码如下:@EnableWebMvc //默认情况下Spring Boot 使用WebMvcAutoConfiguration中配置的各种属性,@Ena...

tianjidudao的博客 6599

Jackson 序列化机制深度解析:解决前端 Long 类型精度丢失问题

本文深入解析了 Spring Boot 中 Jackson 的序列化机制,重点解决了 Long 类型数据在前端精度丢失问题。通过对比 @RequestParam 和 @RequestBody 的参数绑定差异,指出 JSON 请求体更适合处理大整数。文章详细分析了 JavaScript 的精度限制(53位),并提供了全局配置方案:使用 JacksonConfig 自动将超出安全范围的 Long 类型序列化为字符串,同时保留日期时间格式化功能。该方案通过 @AutoConfiguration 确保优先加载,全面

树後蹲壹熊 780
上一篇: 通过Aop实现限制修改删除指定账号的数据
下一篇: Spring Boot 通过全局配置去除字符串类型参数的前后空格
村口老师傅
博客等级 码龄9年 67粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值