package com.iailab.framework.common.util.json.databind;
|
|
import com.fasterxml.jackson.core.JsonGenerator;
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
|
|
import java.io.IOException;
|
|
/**
|
* Long 序列化规则
|
*
|
* 会将超长 long 值转换为 string,解决前端 JavaScript 最大安全整数是 2^53-1 的问题
|
*
|
* @author 星语
|
*/
|
@JacksonStdImpl
|
public class NumberSerializer extends com.fasterxml.jackson.databind.ser.std.NumberSerializer {
|
|
private static final long MAX_SAFE_INTEGER = 9007199254740991L;
|
private static final long MIN_SAFE_INTEGER = -9007199254740991L;
|
|
public static final NumberSerializer INSTANCE = new NumberSerializer(Number.class);
|
|
public NumberSerializer(Class<? extends Number> rawType) {
|
super(rawType);
|
}
|
|
@Override
|
public void serialize(Number value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
|
// 超出范围 序列化位字符串
|
if (value.longValue() > MIN_SAFE_INTEGER && value.longValue() < MAX_SAFE_INTEGER) {
|
super.serialize(value, gen, serializers);
|
} else {
|
gen.writeString(value.toString());
|
}
|
}
|
}
|