Mybatis Plus 的主键策略:
java
/**
* 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位,所以导致后面三位丢失了。
-
最暴力的做法,就是把id改为 string 类型,不过太复杂,可能会出现很多问题,会比较麻烦。
-
全局配置来让 Long类型转换为 JSON 中的string 类型
java
@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 ==> String
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
return objectMapper;
}
}
- 在 application.yml 中加配置
java
spring:
jackson:
generator:
write-numbers-as-strings: true
- 在id 字段上加注解
java
@JsonSerialize(using = ToStringSerializer.class)