diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/config/JsonConfig.java b/bnyer-auth/src/main/java/com/bnyer/auth/config/JsonConfig.java similarity index 93% rename from bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/config/JsonConfig.java rename to bnyer-auth/src/main/java/com/bnyer/auth/config/JsonConfig.java index 9b23d72..dfbd71b 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/config/JsonConfig.java +++ b/bnyer-auth/src/main/java/com/bnyer/auth/config/JsonConfig.java @@ -1,6 +1,6 @@ -package com.bnyer.common.core.config; +package com.bnyer.auth.config; -import com.bnyer.common.core.serializer.LongToStringSerializer; +import com.bnyer.auth.serializer.LongToStringSerializer; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/serializer/LongToStringSerializer.java b/bnyer-auth/src/main/java/com/bnyer/auth/serializer/LongToStringSerializer.java similarity index 95% rename from bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/serializer/LongToStringSerializer.java rename to bnyer-auth/src/main/java/com/bnyer/auth/serializer/LongToStringSerializer.java index 5dcd97c..af4c0ce 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/serializer/LongToStringSerializer.java +++ b/bnyer-auth/src/main/java/com/bnyer/auth/serializer/LongToStringSerializer.java @@ -1,4 +1,4 @@ -package com.bnyer.common.core.serializer; +package com.bnyer.auth.serializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; diff --git a/bnyer-gateway/src/main/java/com/bnyer/gateway/config/JsonConfig.java b/bnyer-gateway/src/main/java/com/bnyer/gateway/config/JsonConfig.java new file mode 100644 index 0000000..2691ce4 --- /dev/null +++ b/bnyer-gateway/src/main/java/com/bnyer/gateway/config/JsonConfig.java @@ -0,0 +1,36 @@ +package com.bnyer.gateway.config; + +import com.bnyer.gateway.serializer.LongToStringSerializer; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; + +/** + * 解决雪花Id长度超过16位前端传入精度丢失的问题 + */ +@Configuration +public class JsonConfig { + @Bean + @Primary + @ConditionalOnMissingBean(ObjectMapper.class) + public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) + { + ObjectMapper objectMapper = builder.createXmlMapper(false).build(); + // 全局配置序列化返回 JSON 处理 + SimpleModule simpleModule = new SimpleModule(); + //JSON Long ==> String + //自定义字符串转化规则ToStringSerializer换成自定义的LongToStringSerializer + simpleModule.addSerializer(Long.class, LongToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, LongToStringSerializer.instance); + + objectMapper.registerModule(simpleModule); + //参数在bean中没有的情况处理 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return objectMapper; + } +} diff --git a/bnyer-gateway/src/main/java/com/bnyer/gateway/serializer/LongToStringSerializer.java b/bnyer-gateway/src/main/java/com/bnyer/gateway/serializer/LongToStringSerializer.java new file mode 100644 index 0000000..f62a046 --- /dev/null +++ b/bnyer-gateway/src/main/java/com/bnyer/gateway/serializer/LongToStringSerializer.java @@ -0,0 +1,24 @@ +package com.bnyer.gateway.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class LongToStringSerializer extends JsonSerializer { + public static final LongToStringSerializer instance = new LongToStringSerializer(); + + @Override + public void serialize(Long id, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if(id != null){ + //长度小于某个值的,还是保持long类型 + if(id < 10000000000000000L){ + jsonGenerator.writeNumber(id); + }else { + //长度超过某个值的,转化为字符串 + jsonGenerator.writeString(id.toString()); + } + } + } +} \ No newline at end of file diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/JsonConfig.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/JsonConfig.java new file mode 100644 index 0000000..d0386a0 --- /dev/null +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/JsonConfig.java @@ -0,0 +1,36 @@ +package com.bnyer.order.config; + +import com.bnyer.order.serializer.LongToStringSerializer; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; + +/** + * 解决雪花Id长度超过16位前端传入精度丢失的问题 + */ +@Configuration +public class JsonConfig { + @Bean + @Primary + @ConditionalOnMissingBean(ObjectMapper.class) + public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) + { + ObjectMapper objectMapper = builder.createXmlMapper(false).build(); + // 全局配置序列化返回 JSON 处理 + SimpleModule simpleModule = new SimpleModule(); + //JSON Long ==> String + //自定义字符串转化规则ToStringSerializer换成自定义的LongToStringSerializer + simpleModule.addSerializer(Long.class, LongToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, LongToStringSerializer.instance); + + objectMapper.registerModule(simpleModule); + //参数在bean中没有的情况处理 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return objectMapper; + } +} diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/serializer/LongToStringSerializer.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/serializer/LongToStringSerializer.java new file mode 100644 index 0000000..839c91f --- /dev/null +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/serializer/LongToStringSerializer.java @@ -0,0 +1,24 @@ +package com.bnyer.order.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class LongToStringSerializer extends JsonSerializer { + public static final LongToStringSerializer instance = new LongToStringSerializer(); + + @Override + public void serialize(Long id, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if(id != null){ + //长度小于某个值的,还是保持long类型 + if(id < 10000000000000000L){ + jsonGenerator.writeNumber(id); + }else { + //长度超过某个值的,转化为字符串 + jsonGenerator.writeString(id.toString()); + } + } + } +} \ No newline at end of file diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/config/JsonConfig.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/config/JsonConfig.java new file mode 100644 index 0000000..44b527e --- /dev/null +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/config/JsonConfig.java @@ -0,0 +1,36 @@ +package com.bnyer.pay.config; + +import com.bnyer.pay.serializer.LongToStringSerializer; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; + +/** + * 解决雪花Id长度超过16位前端传入精度丢失的问题 + */ +@Configuration +public class JsonConfig { + @Bean + @Primary + @ConditionalOnMissingBean(ObjectMapper.class) + public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) + { + ObjectMapper objectMapper = builder.createXmlMapper(false).build(); + // 全局配置序列化返回 JSON 处理 + SimpleModule simpleModule = new SimpleModule(); + //JSON Long ==> String + //自定义字符串转化规则ToStringSerializer换成自定义的LongToStringSerializer + simpleModule.addSerializer(Long.class, LongToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, LongToStringSerializer.instance); + + objectMapper.registerModule(simpleModule); + //参数在bean中没有的情况处理 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return objectMapper; + } +} diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/serializer/LongToStringSerializer.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/serializer/LongToStringSerializer.java new file mode 100644 index 0000000..c3958b9 --- /dev/null +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/serializer/LongToStringSerializer.java @@ -0,0 +1,24 @@ +package com.bnyer.pay.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +public class LongToStringSerializer extends JsonSerializer { + public static final LongToStringSerializer instance = new LongToStringSerializer(); + + @Override + public void serialize(Long id, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if(id != null){ + //长度小于某个值的,还是保持long类型 + if(id < 10000000000000000L){ + jsonGenerator.writeNumber(id); + }else { + //长度超过某个值的,转化为字符串 + jsonGenerator.writeString(id.toString()); + } + } + } +} \ No newline at end of file