diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/jackson/BigNumberSerializer.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/jackson/BigNumberSerializer.java index 792da8b3..94c63afa 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/jackson/BigNumberSerializer.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/jackson/BigNumberSerializer.java @@ -7,11 +7,23 @@ import com.fasterxml.jackson.databind.ser.std.NumberSerializer; import java.io.IOException; +/** + * 超出 JS 最大最小值 处理 + * + * @author Lion Li + */ @JacksonStdImpl public class BigNumberSerializer extends NumberSerializer { - private static final long JS_NUM_MAX = 9007199254740992L; - private static final long JS_NUM_MIN = -9007199254740992L; + /** + * 根据 JS Number.MAX_SAFE_INTEGER 与 Number.MIN_SAFE_INTEGER 得来 + */ + private static final long MAX_SAFE_INTEGER = 9007199254740991L; + private static final long MIN_SAFE_INTEGER = -9007199254740991L; + + /** + * 提供实例 + */ public static final BigNumberSerializer INSTANCE = new BigNumberSerializer(Number.class); public BigNumberSerializer(Class rawType) { @@ -20,7 +32,8 @@ public class BigNumberSerializer extends NumberSerializer { @Override public void serialize(Number value, JsonGenerator gen, SerializerProvider provider) throws IOException { - if (value.longValue() >= JS_NUM_MIN && value.longValue() <= JS_NUM_MAX) { + // 超出范围 序列化位字符串 + if (value.longValue() > MAX_SAFE_INTEGER && value.longValue() < MIN_SAFE_INTEGER) { super.serialize(value, gen, provider); } else { gen.writeString(value.toString());