首页 > 其他分享 >long类型精度丢失问题的三种解决方案 (在Long长度大于17位时会出现精度丢失的问题)

long类型精度丢失问题的三种解决方案 (在Long长度大于17位时会出现精度丢失的问题)

时间:2024-06-06 15:55:55浏览次数:18  
标签:JsonFormat 17 Long 丢失 import ToStringSerializer com 精度 build

1. 简介

​ 对于Long类型的数据,如果我们在Controller层将结果序列化为json,直接传给前端的话,在Long长度大于17位时会出现精度丢失的问题

2. 解决方案

2.1 注解

2.1.1 @JsonFormat

 @JsonFormat(shape =JsonFormat.Shape.STRING)

2.1.2 @JsonSerialize

@JsonSerialize(using = ToStringSerializer.class)

2.1.3 详情

package com.king.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;

/**
 * @author King
 * @version 1.0
 * @description TODO
 * @date 2023/9/5 10:19
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class user implements Serializable {
    //方式一
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long id;
    private String username;
    private String password;
    //方式二
    @JsonSerialize(using = ToStringSerializer.class)
    private String userId;
}

2.2 ObjectMapper

在spring boot的启动类或者spring的配置类里面添加bean

/**
    * @description Long类型精度类型丢失
    * @param mapperBuilder 
    * @return com.fasterxml.jackson.databind.ObjectMapper
    * @author King
    * @date 2023/9/5 10:33
    */
    @Bean
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder mapperBuilder) {
        ObjectMapper build = mapperBuilder.createXmlMapper(false).build();
        build.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        SimpleModule module = new SimpleModule();    
        module.addSerializer(Long.class, ToStringSerializer.instance);
        module.addSerializer(Long.TYPE, ToStringSerializer.instance);
        build.registerModule(module);
        return build;

    }

 

标签:JsonFormat,17,Long,丢失,import,ToStringSerializer,com,精度,build
From: https://www.cnblogs.com/Fooo/p/18235277

相关文章

  • 【git】resert、revert代码丢失解决方案
    技术博客:GitReflog与多场景下的版本恢复策略实战指南在软件开发的旅途中,Git作为版本控制的守护者,为开发者们提供了强大的历史记录追溯能力。今天,我们将通过具体实例,深入探索如何运用Git的reflog命令找回丢失的代码,并通过对比gitrevert与gitreset在不同情境下的应用,为你......
  • arc179d 题解
    arc179d思路设计树形dp。\(dp_{u,0}\)表示进子树\(u\)并不再出去的代价。\(dp_{u,1}\)表示进子树\(u\)并返回,且传送门在\(fa\)、不在子树内使用传送门的代价。\(dp_{u,2}\)表示进入子树\(u\)并返回,且可以在子树内使用传送门。发现\(dp_{u,1}\)一定是遍历子树最后......
  • 「杂题乱刷」AT_abc179_e
    代码恢复2024.6.5。链接很简单。直接找循环节就行了。代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?打cf不要用umap!!!记住,rating是身外之物。该冲正解时冲正解!Problem:算法:思路:*/#inc......
  • 「C++」论高精度
    大家好,我是Charzie。在编程领域,高精度计算是一个常见的问题。当标准的整型或浮点型无法满足我们的计算需求时,高精度计算就显得尤为重要。在C++中,虽然标准库没有直接提供高精度数据类型,但我们可以通过一些技巧和工具类来实现高精度计算。为什么需要高精度?在编程中,我们经常会遇到......
  • 习题整理《C++17从入门到精通》第二章-变量和基本类型
                                                             //复习用,如有错误,请指正1.下面哪些是不合法的变量标识符?为什么?@ohd      *zara    a2bc    move_name    a_123myname50  _......
  • 习题整理《C++17从入门到精通》第五章-复合类型:数组、指针和引用
                                                            //复习用,如有错误,请指正1.下面程序的输出是什么?#include<iostream>usingnamespacestd;intmain(){intx=10;int&ref=x;......
  • P4003 [清华集训 2017] 无限之环 解题报告
    oj:https://gxyzoj.com/d/gxyznoi/p/P93它要判断什么时候不漏水,就是需要建一种图,使得原图的最大流是答案因为是网格图,考虑黑白染色,可以将\((i+j)\)对2取模的结果作为颜色,将所有颜色为1的点向源点连边,颜色为0的点向汇点连边接下来考虑如何判断是否漏水,因为有四个方向,考虑拆点将......
  • Windows11系统Pnrphc.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个Pnrphc.dll文件(挑选合适的版本文件)把它放......
  • CF1743D Problem with Random Tests
    题目链接:https://codeforces.com/contest/1743/problem/D这题比较考察做题的经验因为或操作对一个数的值只增不减,所以我们要往高位考虑.我们截取的第一段需要满足最高位的1在原串中也是最高位的1,这样才能做到别的所有的数都不如他大.截取的第二段需要能首先满足把第一段截取......
  • 基于springboot在线互动学习网站设计(11726)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......