长整型Long返回到前端,js出现精度丢失怎么办

前端后接口对接时,如果后台的id或者其他字段使用了长整型Long,就很容易出现js丢失精度问题。用接口工具调用时,往往id返回都是对的,但是一到页面上,js就后缀000。
前端说返回的值有问题,F12看看!后端说没问题,Postman看看!
这是js支持的问题,解决这个问题的办法很显然,返回字符串即可。
怎么实现呢,你可以直接将vo对象的id改成String类型,但是会带来copyProperties的不便,所以见过很多人通过增加虚拟字段实现。下面是一个整体解决方案:(需要略微了解下Spring的消息序列化原理,譬如MappingJackson2HttpMessageConverter是干嘛的)

  1. MainConfig(通常是主config类,@Configuration注解的,用来导入一些基础配置)增加MessageConvert的重写extendMessageConverters:

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jacksonConverter = null;
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                jacksonConverter = (MappingJackson2HttpMessageConverter) converter;
            }
        }
        if (jacksonConverter != null) {
            jacksonConverter.setObjectMapper(new CustomObjectMapper());
            converters.add(jacksonConverter);
        }
    }
  2. CustomObjectMapper的实现:
    public class CustomObjectMapper extends ObjectMapper {
    public CustomObjectMapper() {
        super();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        registerModule(simpleModule);
    }
    }

这样,接口返回的时候,所有的长整型字段,会被当做字符串处理,自动加上双引号。

原文地址:https://blog.51cto.com/10705830/2458328

时间: 2024-11-11 04:51:11

长整型Long返回到前端,js出现精度丢失怎么办的相关文章

Json.NET特殊处理64位长整型数据

很多ASP.NET项目,尤其是使用了Ajax的项目,常常需要返回JSON格式的数据..NET框架从3.5版本开始提供了JSON的序列化和反序列化工具,不过个人感觉不太好用,后来找了第三方的Newtonsoft.Json来用.再后来,在MVC4中,微软已经默认使用Json.NET(Newtonsoft.Json)来处理JSON数据了. JavaScript数值精度是32位,如果整数数度超过32位,就会被当作浮点数处理.换句话说,如果从服务端生成的JSON,某个值是64位整数,传到前端JavaScr

Java把长整型时间转成字符串日期

数据库里存放的是timestamp格式,前端取得后是这种:1436255550710长整型时间截转换成"2015-07-07"这种格式呢? import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { /** * Java把长整型时间转成字符串日期 * @param args * @throws IOException */ public

php长整型原始输出

今天调用webservice时返回一个字段是int64 长整型 原始的数值应该是 190000002101056096 而php返回时转成 1.9000000210106E+17 当传入另一个接口就报错了 解决方法 $c=1.9000000210106E+17; 1 number_format() number_format($c,0,'','') 2 sprintf sprintf("%.0f",$c);

【c语言】把一个长整型给一个字符指针

// 把一个长整型给一个字符指针,修改的时候只修改了一个字节,结果会是一个很大的随机数 // 并不能通过这种方式给长整型赋值1 #include <stdio.h> void VarInit(unsigned char* pucArg) { *pucArg = 1; return; } int main() { unsigned long ulGlobal; VarInit((unsigned char*)&ulGlobal); printf("%lu\n", ul

整形_长整型的使用范围和规则

整形_长整型的使用范围(两个数的乘积) 1. I.unsigned long :%lu ; unsigned long long :%llu. II.当结果在输出格式范围之内,则输出正确,否则不正确. III. 当结果在输出格式范围之外,则输出的值与结果模(变量类型的大小的值)相等,且输出的值在变量类型的范围内.这里若结果大于2^64,则上述结论不正确. Code: 1 #include <stdio.h> 2 #include <stdlib.h> 3   4 int main(

(DateTime)日期型数据转换成C#长整型数据

这里介绍日期型数据转换成C#长整型数据,由于各种数据库对日期型的定义和处理是不一样的,各种语言对日期型数据的定义的处理也各不相同,因为,我宁愿将日期型数据转换成长整型数据再保存到数据库中. AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验 C#语言还是比较常见的东西,这里我们主要介绍日期型数据转换成C#长整型数据,包括介绍DateTime 的构造函数等方面. 转自:http://developer.51cto.com/art/200908/147684.htm 日期型数

Python 数值类型(整型、长整型、浮点型、复数型)

一.整型 In [1]: a = 123 # 定义整数类型 In [2]: type(a) # 查看数据类型 Out[2]: int -2147483648 —— 2147483647 # 整型的取值范围,如果超过了这个范围则成为长整型 二.长整型 In [7]: a = 123456789123456789123456789 # 定义长整型 In [8]: type(a) # 查看数据类型 Out[8]: long In [9]: a # 长整型后面会带有字母(l或L)以标识这是长整型 Out

PHP长整型在32位系统中强制转化溢出

CleverCode近期遇到一个PHP项目整形转化问题,mysql有一个字段id是bigint的,里面有长整型,如id = 5147486396.可是php代码因为历史原因却部署在多台机器中,当中A机器32位系统中,B机器64系统中.如今的问题是64系统中页面訪问正常.32位系统中訪问出错了.原因是php整形溢出. 1 A机器演示 1.1 获取A机器系统位数 # getconf LONG_BIT 1.2 整形转化代码 <? php $id = 5147486396; echo '$id:'.$i

整数、长整型、浮点型、字符串

如: 18.73.84 每一个整数都具备如下功能: int 二.长整型 可能如:2147483649.9223372036854775807 每个长整型都具备如下功能: long 三.浮点型 如:3.14.2.88 每个浮点型都具备如下功能: float 四.字符串 如:'wupeiqi'.'alex' 每个字符串都具备如下功能: str