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

项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种。

不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在获取数据时会丢失精度,从而造成数据的不准确,解决方式呢,就是在序列化时,会将Long类型的数据转化为String类型

在使用Spring MVC默认的Jackson时,我们可以这么做:

@Configuration

public class WebConfig extends WebMvcConfigurerAdapter {

@Override

public void configureMessageConverters(List> converters) {

MappingJackson2HttpMessageConverter jackson2HttpMessageConverter =

new MappingJackson2HttpMessageConverter();

ObjectMapper objectMapper = new ObjectMapper();

SimpleModule simpleModule = new SimpleModule();

simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);

simpleModule.addSerializer(Long.class, ToStringSerializer.instance);

simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);

objectMapper.registerModule(simpleModule);

jackson2HttpMessageConverter.setObjectMapper(objectMapper);

converters.add(jackson2HttpMessageConverter);

converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));

}

}

当然,有时候项目中也可能会统一约定使用了fastjson,然而Spring MVC中默认是使用了Jackson的

在Spring Boot中将Jackson替换为fastjson一般会有两种方式:

第一种:

@Configuration

public class WebConfig extends WebMvcConfigurerAdapter {

@Bean

public HttpMessageConverters fastJsonHttpMessageConverter() {

return new HttpMessageConverters(new FastJsonHttpMessageConverter());

}

}

第二种:

@Configuration

public class WebConfig extends WebMvcConfigurerAdapter {

@Override

public void configureMessageConverters(List> converters) {

FastJsonHttpMessageConverter fastConverter =

new FastJsonHttpMessageConverter();

FastJsonConfig fastJsonConfig = new FastJsonConfig();

fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);

fastConverter.setFastJsonConfig(fastJsonConfig);

converters.add(fastConverter);

}

}

替换成fastjson之后,对于精度丢失问题,我们可以这么去做:

@Configuration

public class WebConfig extends WebMvcConfigurerAdapter {

@Override

public void configureMessageConverters(List> converters) {

FastJsonHttpMessageConverter fastConverter =

new FastJsonHttpMessageConverter();

FastJsonConfig fastJsonConfig = new FastJsonConfig();

SerializeConfig serializeConfig = SerializeConfig.globalInstance;

serializeConfig.put(BigInteger.class, ToStringSerializer.instance);

serializeConfig.put(Long.class, ToStringSerializer.instance);

serializeConfig.put(Long.TYPE, ToStringSerializer.instance);

fastJsonConfig.setSerializeConfig(serializeConfig);

fastConverter.setFastJsonConfig(fastJsonConfig);

converters.add(fastConverter);

}

}

我想对于另一种方式,怎么去做大家也该明白的吧,这里就不多说了。

需要注意的是,这里使用的fastjson的版本为1.2.31,版本不同,方式略有不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值