首页 > 其他分享 >Long类型后端传前端精度丢失的优雅解决方案

Long类型后端传前端精度丢失的优雅解决方案

时间:2023-06-15 17:25:41浏览次数:38  
标签:jackson 后端 解决方案 value 优雅 Long import com

前言提要:javaScript 的最大安全值:Number.MAX_SAFE_INTEGER 是一个值为 9007199254740991 的常量,如果超过这个值,那么js会出现不精确问题

  • 解决方案(推荐级别:低等):修改字段类型为String
  • 解决方案(推荐级别:中等):字段上添加注解 @JsonFormat(shape = JsonFormat.Shape.STRING)
  • 解决方案(推荐级别:中等):字段上添加注解 @JsonSerialize(using = ToStringSerializer.class)
  • 解决方案(推荐级别:优等):全局设置
    精度丢失全局定义类:
    image
全局定义类代码,点击查看
package com.xqz.pms.handler;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;

/**
 * @author XueQiZheng
 * @date 2021/11/10
 *
 * 描述:jackson全局配置
 */
@Configuration
@Slf4j
public class JacksonCustomizerConfig {
    /**
     * 描述:统一配置类型的转换策略
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> {
            /**
             * 将ID为Long类型转换成string类型返回,避免Long类型ID传前端后精度丢失的问题
             */
            JsonSerializer<Long> serializer = new JsonSerializer<Long>() {

                @Override
                public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                    //如果项目中有Long类型有特殊使用场景,可以在这里做区分,超过精度的才转为String
//                    if (Objects.nonNull(value) && value >= 9007199254740991L) {
//                        log.info("Jackson2ObjectMapperBuilderCustomizer value ={}", value);
                        jsonGenerator.writeString(value.toString());
//                    } else {
//                        jsonGenerator.writeNumber(value);
//                    }
                }
            };
            builder.serializerByType(Long.class, serializer);
        };
    }
}

精度丢失注解方案:
image

标签:jackson,后端,解决方案,value,优雅,Long,import,com
From: https://www.cnblogs.com/xueqizheng/p/17483304.html

相关文章

  • 如何优雅地使用Low Code提高开发效率
    2023年,低代码热度有,但是在企业内部核心场景的落地比例不高,推进进展也没有想象中快。就算是这样,低代码赛道也在“暗流涌动”。数字化趋势下,很多企业想要以数字化的手段进行降本增效。很多企业希望以低代码的模式,搭建符合自身业务需求的应用。   现在国内企业很大程度上是......
  • Longest Path (牛客多校) (换根DP+斜率优化)
    换根dp:第一次dfs处理儿子点的权值第二次dfs处理父亲点,和兄弟节点的权值处理兄弟节点的时候,利用父亲节点统一处理,利用stl存储斜率优化:为什么会用到斜率优化:在遇到转移式子是fixfj的时候,不是分开的,(分开的,直接用单调队列处理)(通常会遇到平方式子)把......
  • C++ 数值最大最小标识符一网打尽,INT_MIN/ INT_MAX/LONG_MIN/LONG_MAX 等等
    ConstantMeaningValueCHAR_BIT Numberofbitsinthesmallestvariablethatisnotabitfield. 8SCHAR_MIN Minimumvalueforavariableoftypesignedchar. -128SCHAR_MAX Maximumvalueforavariableoftypesignedchar. 127UCHAR_MAX Maximumvalueforav......
  • 【后端面经-数据库】MySQL的事务隔离级别简介
    (【后端面经-数据库】MySQL的事务隔离级别简介)0.事务的概念事务指的是一连串的集中操作指令,一个事务的执行必须执行完所有的动作才能算作执行结束。事务具有四个特点,简记作ACID:A-Atomicity:原子性,事务的执行必须保证所有的动作都执行完毕;C-Consistency:一致性,事务的执行必......
  • 【后端面经-数据库】MySQL的事务隔离级别简介
    目录0.事务的概念1.三类问题2.事务隔离级别3.操作指令4.总结5.参考博文0.事务的概念事务指的是一连串的集中操作指令,一个事务的执行必须执行完所有的动作才能算作执行结束。事务具有四个特点,简记作ACID:A-Atomicity:原子性,事务的执行必须保证所有的动作都执行完毕;C-Co......
  • 前端工程师后端转型实录
    采访讲师师姜雨晴,MediaTrack音视频研发负责人。毕业于DalhousieUniversity,曾任字节跳动高级前端开发工程师,熊猫直播音视频研发负责人,猫耳FM前端开发工程师。目前负责MediaTrack多端播放器研发、转码中心技术架构和研发、音视频安全和音视频质量保障。LiveVideoStack:请您介绍一下......
  • web页面中导出Excel 方法一 后端php导出Excel
    这个示例使用 前端easyui-datagrid 后端php 其中前端是不是easyui-datagrid不重要,这个方法主要是使用后端php来实现导出Excel优点:现在的应用中大部分是分页显示的,在前台只显示一部分,但导出Excel是要看全部的。所以此时用前端js导出则不太好实现。缺点:当查询数据量较......
  • fastadmin把后端变量传递到指定列表下的js文件
    php文件$this->assignconfig("customer_status_list",DictionaryService::getCustomerFieldDictionaryConfig('customer_status'));js文件{field:'customer_status',title:'客户状态',operate:"LIKE",......
  • 项目管理(一)——创建后端环境与测试接口
    一、创建项目(1)新建工程  在创建springboot或者springcloud项目时,idea默认使用https://start.spring.io作为脚手架,创建完成后手动去添加相关的jar包组合。  通过https://start.aliyun.com 可以直接勾选ali相关的jar包,快速的引入集成。下一步,在依赖中选择Web中的Spr......
  • Codeforces Round #274 (Div. 2)-D. Long Jumps
    原题链接D.LongJumpstimelimitpertestmemorylimitpertestinputoutputValeryisaPEteacherataschoolinBerland.Soonthestudentsaregoingtotakeatestinlongjumps,andValeryhaslosthisfavo......