mybatisplus使用雪花id通过swagger返回ID时精度丢失问题
MyBatis-Plus 在使用雪花算法生成ID时,如果通过Swagger返回这个ID,可能会遇到精度丢失的问题。这通常是因为JavaScript中Number类型的精度有限,如果ID超过了Number能表示的安全整数范围(大约±9007199254740991),则可能会丢失精度。
解决方法:
- 使用字符串传输ID:在定义实体类的ID属性时,使用
String
类型而不是Long
类型来存储ID,这样可以避免数值精度的问题。
public class Entity {
@TableId(type = IdType.ASSIGN_ID)
private String id;
// ... 其他属性
}
- 配置Swagger:在Swagger的配置中,将ID的表现形式指定为字符串。
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.controller"))
.paths(PathSelectors.any())
.build()
.pathMapping("/")
.directModelSubstitute(Long.class, String.class) // 确保ID以字符串形式返回
.genericModelSubstitutes(DeferredResult.class)
.useDefaultResponseMessages(false);
}
通过以上两步,可以确保在Swagger中ID作为字符串返回,避免了JavaScript处理时的精度问题。
评论已关闭