update 更新 BigNumberSerializer 注释

This commit is contained in:
疯狂的狮子li 2021-07-29 14:28:08 +08:00
parent 0158fb437d
commit d29a7adc9a
1 changed files with 16 additions and 3 deletions

View File

@ -7,11 +7,23 @@ import com.fasterxml.jackson.databind.ser.std.NumberSerializer;
import java.io.IOException; import java.io.IOException;
/**
* 超出 JS 最大最小值 处理
*
* @author Lion Li
*/
@JacksonStdImpl @JacksonStdImpl
public class BigNumberSerializer extends NumberSerializer { 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 static final BigNumberSerializer INSTANCE = new BigNumberSerializer(Number.class);
public BigNumberSerializer(Class<? extends Number> rawType) { public BigNumberSerializer(Class<? extends Number> rawType) {
@ -20,7 +32,8 @@ public class BigNumberSerializer extends NumberSerializer {
@Override @Override
public void serialize(Number value, JsonGenerator gen, SerializerProvider provider) throws IOException { 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); super.serialize(value, gen, provider);
} else { } else {
gen.writeString(value.toString()); gen.writeString(value.toString());