第一次引入雪花算法当作生成主键,遇到问题如下:
前端请求获取的response的值,ID和后端返回的值不一致,排查了很久发现是前端在获取时将Long类型值转换超范围导致丢失精度
Java后端Long类型的范围
- -2^63~2^63,即:-9223372036854775808~9223372036854775807,它是19位的。
- 这个数字可以通过方法获得:Long.MAX_VALUE、Long_MIN_VALUE。
前端JS的数字类型的范围
- -2^53~2^53,即:-9007199254740991~9007199254740991,它是16位的。
- 这个数字可以通过方法获得:Number.MAX_SAFE_INTEGER、Number.MIN_SAFE_INTEGER。
解决办法
1. 全局处理
自定义ObjectMapper
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converte