springboot中使用FastJson解决long类型在js中失去精度的问题
作者:Nightliar 时间:2022-04-05 05:15:27
使用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);
}
}
来源:https://blog.csdn.net/Nightliar/article/details/82351963
标签:springboot,FastJson,long类型,精度
0
投稿
猜你喜欢
Android12 蓝牙适配的实现步骤
2021-08-25 08:36:34
Java全面细致讲解类与对象
2022-07-07 07:04:42
SpringBoot中定时任务@Scheduled注解的使用解读
2022-11-24 17:20:11
Java抽象类的概念讲解
2023-11-04 13:40:35
C语言非递归后序遍历二叉树
2023-12-13 18:05:45
Unity屏幕雪花另类实现方式示例
2022-06-18 23:32:43
C#如何消除验证码图片的锯齿效果
2023-11-05 04:49:14
C++内存模型与名称空间概念讲解
2023-07-15 03:43:43
Spark网站日志过滤分析实例讲解
2021-06-08 12:59:24
基于Mybatis-Plus的CRUD的实现
2023-09-10 14:38:45
Java毕业设计实战项目之宠物商城系统的实现流程
2022-03-02 06:10:41
java设计模式之工厂方法模式
2022-08-29 05:14:10
C# WinForm实现自动更新程序的方法详解
2021-12-12 16:19:54
c++中的malloc底层实现代码
2023-11-02 19:49:18
Java Web开发过程中登陆模块的验证码的实现方式总结
2022-01-29 19:33:16
使用注解@Recover优化丑陋的循环详解
2021-08-05 15:11:13
简单了解Java字符串(操作)
2022-04-22 18:37:29
C#开发的人脸左右相似度计算软件源码分析
2023-08-26 05:18:41
C# 正则判断一个数字的格式是否有逗号的代码
2021-09-13 07:42:12
SpringBoot实战之SSL配置详解
2022-08-03 19:38:17