Long类型数据前后端交互时丢失精度的理解:
因为JavaScript处理数字的精度是有限的,有效精度为2的53次方,而数据库中的BigInt类型即Long类型的精度为2的63次方,所以在前端会将数据的精度丢失。
解决办法:
1,在前端接收数据时,将其用String类型表示并使用(处计算外)
2,序列化——@JsonSerialize注解,序列化——toStringSerialize.class
3,增加对象转换器,在后端进行转换
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
//日期格式转换
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setDateFormat(new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN));
mapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
//Long类型转String类型
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
mapper.registerModule(simpleModule);
converter.setObjectMapper(mapper);
return converter;
}
}