Long类型精度丢失问题
我们后端数据库存的是Long类型的id,
前端查询的时候,发现不一致
原因是:
- Java中,Long的范围是
[-2^64,2^64-1]
- js中,Number的范围是:
[-2^53,2^53-1]
解决办法:
我们在后端,返回Long的时候,不要给Long类型,而是给String类型,可以使用JsonSerialize
@Schema(description ="收集任务id")
@JsonSerialize(using = ToStringSerializer.class)
private Long collectionId;
或者全局配置,就不用每个都写了:
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
SimpleModule simpleModule = new SimpleModule();
// 将Long类型序列化为String类型
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
return objectMapper;
}
}