Mybatis Plus 的主鍵策略:
/*** id*/@TableId(type = IdType.ASSIGN_ID)private Long id;
這個主鍵策略會用雪花算法生成一個 19位的ID,比如 1791006670084734978
現象
后端生成的 id 是正常的,通過 swagger 文檔此時獲取到的 id 也和數據庫中的 id 一致,但是在前端用 number 存儲 id 之后發現變成了?179 100 667 008 473 4000
可能是因為 number 的精度只有16位,而雪花算法的精度是 19位,所以導致后面三位丟失了。
1. 最暴力的做法,就是把id改為 string 類型,不過太復雜,可能會出現很多問題,會比較麻煩。
2. 全局配置來讓 Long類型轉換為 JSON 中的string 類型
@Configuration
public class JacksonConfig {@Bean@Primary@ConditionalOnMissingBean(ObjectMapper.class)public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder){ObjectMapper objectMapper = builder.createXmlMapper(false).build();// 全局配置序列化返回 JSON 處理SimpleModule simpleModule = new SimpleModule();//JSON Long ==> StringsimpleModule.addSerializer(Long.class, ToStringSerializer.instance);objectMapper.registerModule(simpleModule);return objectMapper;}}
3. 在 application.yml 中加配置
spring:jackson:generator:write-numbers-as-strings: true
4. 在id 字段上加注解
@JsonSerialize(using = ToStringSerializer.class)
文章來源:雪花算法生成的ID在返回給前端之后和生成的不一樣,到底是什么原因?_雪花算法返給前端不準確-CSDN博客