springboot中使用FastJson解決long類型在js中失去精度的問題
更新時間:2022年06月15日 11:16:20 作者:Nightliar
這篇文章主要介紹了springboot中使用FastJson解決long類型在js中失去精度的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
使用FastJson解決long類型在js中失去精度問題
1.pom中需要將默認的jackson排除掉
<dependency> ? ? <groupId>org.springframework.boot</groupId> ? ? <artifactId>spring-boot-starter-web</artifactId> ? ? <exclusions> ? ? ? ? <!-- json庫統(tǒng)一使用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轉(zhuǎn)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導(dǎo)致Long型數(shù)據(jù)精度丟失問題
? ? ?* @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不生效
主要是重復(fù)了
在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);
? ? ? ? }
}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- SpringBoot整合Gson 整合Fastjson的實例詳解
- SpringBoot如何使用Fastjson解析Json數(shù)據(jù)
- springboot中用fastjson處理返回值為null的屬性值
- 使用SpringBoot+OkHttp+fastjson實現(xiàn)Github的OAuth第三方登錄
- SpringBoot整合FastJson過程解析
- SpringBoot Redis配置Fastjson進行序列化和反序列化實現(xiàn)
- springboot實現(xiàn)FastJson解析json數(shù)據(jù)的方法
- Spring Boot使用FastJson解析JSON數(shù)據(jù)的方法
- Spring?boot詳解fastjson過濾字段為null值如何解決
相關(guān)文章
Java中finally關(guān)鍵字對返回值的影響詳解
這篇文章主要介紹了Java中finally關(guān)鍵字對返回值的影響詳解,執(zhí)行完try catch里面內(nèi)容準備return時,如果還有finally需要執(zhí)行這是編譯器會為我們增加一個全局變量去暫存return 的值,等到finally執(zhí)行完成去return這個全局變量,需要的朋友可以參考下2024-01-01
Java Socket+mysql實現(xiàn)簡易文件上傳器的代碼
最近在做一個小項目,項目主要需求是實現(xiàn)一個文件上傳器,通過客戶端的登陸,把本地文件上傳到服務(wù)器的數(shù)據(jù)庫(本地的)。下面通過本文給大家分享下實現(xiàn)代碼,感興趣的朋友一起看看吧2016-10-10
Spring Cloud Stream如何實現(xiàn)服務(wù)之間的通訊
這篇文章主要介紹了Spring Cloud Stream如何實現(xiàn)服務(wù)之間的通訊,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10
Spring boot 集成 Druid 數(shù)據(jù)源過程詳解
這篇文章主要介紹了Spring boot 集成 Druid 數(shù)據(jù)源過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08
SpringBoot啟動之SpringApplication初始化詳解
這篇文章主要介紹了SpringBoot啟動之SpringApplication初始化詳解,首先初始化資源加載器,默認為null;斷言判斷主要資源類不能為null,否則報錯,需要的朋友可以參考下2024-01-01
深入了解Java中的過濾器Filter和監(jiān)聽器Listener
這篇文章主要為大家詳細介紹了Java中的過濾器Filter和監(jiān)聽器Listener的使用以及二者的區(qū)別,文中的示例代碼講解詳細,需要的可以參考一下2022-06-06

