跳到主要内容

Long类型精度丢失问题

我们后端数据库存的是Long类型的id,

image-20240727222849616

前端查询的时候,发现不一致 image-20240727224707651

原因是:

  • 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;
}
}