diff --git a/src/main/java/cn/iocoder/dashboard/framework/jackson/config/JacksonConfig.java b/src/main/java/cn/iocoder/dashboard/framework/jackson/config/JacksonConfig.java index 27d199a2d..323b447ce 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/jackson/config/JacksonConfig.java +++ b/src/main/java/cn/iocoder/dashboard/framework/jackson/config/JacksonConfig.java @@ -1,7 +1,9 @@ package cn.iocoder.dashboard.framework.jackson.config; +import cn.iocoder.dashboard.framework.jackson.ser.LongSerializer; import cn.iocoder.dashboard.util.json.JsonUtils; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -11,8 +13,15 @@ public class JacksonConfig { @Bean @SuppressWarnings("InstantiationOfUtilityClass") public JsonUtils jsonUtils(ObjectMapper objectMapper) { + SimpleModule simpleModule = new SimpleModule(); + /* + * 新增Long类型序列化规则,数值超过2^53-1,在JS会出现精度丢失问题,因此Long自动序列化为字符串类型 + */ + simpleModule.addSerializer(Long.class,LongSerializer.getInstance()) + .addSerializer(Long.TYPE,LongSerializer.getInstance()); + objectMapper.registerModule(simpleModule); + JsonUtils.init(objectMapper); return new JsonUtils(); } - } diff --git a/src/main/java/cn/iocoder/dashboard/framework/jackson/ser/LongSerializer.java b/src/main/java/cn/iocoder/dashboard/framework/jackson/ser/LongSerializer.java new file mode 100644 index 000000000..6c0561d23 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/jackson/ser/LongSerializer.java @@ -0,0 +1,26 @@ +package cn.iocoder.dashboard.framework.jackson.ser; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +/** + * Long类型序列化规则 + *

+ * 数值超过2^53-1,在JS会出现精度丢失问题,因此Long自动序列化为字符串类型 + */ +public class LongSerializer extends JsonSerializer { + + private static final LongSerializer LONG_SERIALIZER = new LongSerializer(); + + @Override + public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeString(value.toString()); + } + + public static LongSerializer getInstance() { + return LONG_SERIALIZER; + } +}