文章目录
解决前端JS中数据损失精度问题
概述
前端JS中对长度较长的长整型数据进行处理时会损失精度, 从而导致提交的数据和数据库中不一致
解决办法:我们只需要让js处理的数据类型转为字符串类型, 这样就不会损失精度了
实现步骤:
1: 在配置类返回一个Jackson2ObjectMapperBuilderCustomizer的实例方法
导入的包
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
类中内容(可以放到启动类):
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
Jackson2ObjectMapperBuilderCustomizer customizer = jacksonObjectMapperBuilder ->
jacksonObjectMapperBuilder
.serializerByType(Long.class, ToStringSerializer.instance)
.serializerByType(Long.TYPE, ToStringSerializer.instance);
return customizer;
}
2: 需要在配置类WebMvcConfig中重写方法extendMessageConverters方法
// 导入的包
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
//需要继承的类
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {}
类中内容:
@Autowired
private ObjectMapper objectMapper;
/**
* 扩展mvc框架的消息转换器
* @param converters
*/
@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
log.info("扩展消息转换器...");
//创建消息转换器对象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//设置对象转换器,底层使用Jackson将Java对象转为json
//messageConverter.setObjectMapper(new JacksonObjectMapper());
messageConverter.setObjectMapper(objectMapper);
//将上面的消息转换器对象追加到mvc框架的转换器集合中
converters.add(0,messageConverter);
}