mybatisplus使用雪花id通过swagger返回ID时精度丢失问题
    		       		warning:
    		            这篇文章距离上次修改已过425天,其中的内容可能已经有所变动。
    		        
        		                
                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处理时的精度问题。
评论已关闭