后端返回的数据如图所示:
但是前端在接收的时候与后端返回的id不一样:
发生的原因
雪花算法自动生成的id长度是19位,而js里Number类型安全的最大整数只有16位,所以就导致了数据的精度丢失
后端实体类如下:
后端中用Long类型来接收是没有问题,但是传到前端后解析为json时会被解析为Number类型,所以就会发生精度丢失。
解决方案
在后端返回给前端的数据进行JSON序列化时,将Long类型转为String类型,再返回给前端
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
@Configuration
public class JacksonConfiguration {
@Bean
@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;
}
}
重新启动测试,由于前端接收到的数据是字符串格式,所以不会发生精度的丢失。