diff --git a/commons/web-common/src/main/java/com/schbrain/common/web/ObjectMapperConfiguration.java b/commons/web-common/src/main/java/com/schbrain/common/web/ObjectMapperConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..ec754bd9be84f0bc68d08058a403f4c2f75846ed --- /dev/null +++ b/commons/web-common/src/main/java/com/schbrain/common/web/ObjectMapperConfiguration.java @@ -0,0 +1,21 @@ +package com.schbrain.common.web; + +import com.schbrain.common.web.support.LongToStringSerializer; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; + +/** + * @author liaozan + * @since 2023/8/9 + */ +@ConditionalOnClass(Jackson2ObjectMapperBuilder.class) +public class ObjectMapperConfiguration { + + @Bean + public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() { + return builder -> builder.serializerByType(Long.class, LongToStringSerializer.instance); + } + +} diff --git a/commons/web-common/src/main/java/com/schbrain/common/web/WebCommonAutoConfiguration.java b/commons/web-common/src/main/java/com/schbrain/common/web/WebCommonAutoConfiguration.java index f658e3792fac03f0849f3e66f24202aedb49d4b8..5c538252d8077b2f0ead4f499d11d6d258e2842d 100644 --- a/commons/web-common/src/main/java/com/schbrain/common/web/WebCommonAutoConfiguration.java +++ b/commons/web-common/src/main/java/com/schbrain/common/web/WebCommonAutoConfiguration.java @@ -29,7 +29,8 @@ import java.util.List; AuthenticationConfiguration.class, ExceptionHandingConfiguration.class, ServletComponentConfiguration.class, - CorsFilterConfiguration.class + CorsFilterConfiguration.class, + ObjectMapperConfiguration.class }) public class WebCommonAutoConfiguration { diff --git a/commons/web-common/src/main/java/com/schbrain/common/web/support/LongToStringSerializer.java b/commons/web-common/src/main/java/com/schbrain/common/web/support/LongToStringSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..f272aba0edd6c8a0bcb391a8e5344808cbbf988b --- /dev/null +++ b/commons/web-common/src/main/java/com/schbrain/common/web/support/LongToStringSerializer.java @@ -0,0 +1,33 @@ +package com.schbrain.common.web.support; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +import java.io.IOException; + +/** + * @author liaozan + * @since 2023/8/9 + */ +public class LongToStringSerializer extends StdSerializer { + + public static final LongToStringSerializer instance = new LongToStringSerializer(); + + private static final double FRONT_MAX_VALUE = Math.pow(2, 53); + private static final long serialVersionUID = -1872783127429540811L; + + protected LongToStringSerializer() { + super(Long.class); + } + + @Override + public void serialize(Long value, JsonGenerator gen, SerializerProvider provider) throws IOException { + if (value.doubleValue() > FRONT_MAX_VALUE) { + gen.writeString(value.toString()); + } else { + gen.writeNumber(value); + } + } + +}