springboot中使用FastJson解决long类型在js中失去精度的问题

Claire ·
更新时间:2024-11-10
· 684 次阅读

目录

使用FastJson解决long类型在js中失去精度问题

1.pom中需要将默认的jackson排除掉

2.利用fastJson替换掉jackson

springboot long精度缺失问题

问题

使用FastJson解决long类型在js中失去精度问题 1.pom中需要将默认的jackson排除掉 <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-web</artifactId>     <exclusions>         <!-- json库统一使用fastjson -->         <exclusion>             <groupId>com.fasterxml.jackson.core</groupId>             <artifactId>jackson-databind</artifactId>         </exclusion>     </exclusions> </dependency> 2.利用fastJson替换掉jackson package com.nightliar.bootdemo.config.spring; import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.ToStringSerializer; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import com.nightliar.bootdemo.interceptor.GlobalInterceptor; import com.nightliar.bootdemo.interceptor.LoginInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; /** * Created by Nightliar * 2018-08-15 11:09 */ @Configuration public class WebMvcConfig implements WebMvcConfigurer { /** * 添加拦截器 */ @Override public void addInterceptors(InterceptorRegistry registry){ //全局拦截器 registry.addInterceptor(new GlobalInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/static/**"); //登陆拦截器 registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/static/**"); } /** * 利用fastJson替换掉jackson,且解决中文乱码问题 */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters){ FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNonStringKeyAsString, SerializerFeature.BrowserCompatible); //解决Long转json精度丢失的问题 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); //处理中文乱码问题 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); fastConverter.setFastJsonConfig(fastJsonConfig); converters.add(fastConverter); } } springboot long精度缺失问题  /**      * 解决Jackson导致Long型数据精度丢失问题      * @return      */     @Bean("jackson2ObjectMapperBuilderCustomizer")     public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {         Jackson2ObjectMapperBuilderCustomizer customizer = new Jackson2ObjectMapperBuilderCustomizer() {             @Override             public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {                 jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance)                         .serializerByType(Long.TYPE, ToStringSerializer.instance);             }         };         return customizer; } 问题

jackson2ObjectMapperBuilderCustomizer不生效

主要是重复了

在WebMvcConfigurer中添加

@Autowired(required = false)     private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;     @Override     public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {         converters.removeIf(converter -> converter instanceof MappingJackson2HttpMessageConverter);         if (Objects.isNull(mappingJackson2HttpMessageConverter)) {             converters.add(0, new MappingJackson2HttpMessageConverter());         } else {             converters.add(0, mappingJackson2HttpMessageConverter);         } }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件开发网。



js中 springboot LONG 精度 fastjson

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章