From 0bffdadeadbd354f9020508cde6724339db24b56 Mon Sep 17 00:00:00 2001 From: Penny <2500338766@qq.com> Date: Tue, 16 May 2023 01:20:03 +0800 Subject: [PATCH] =?UTF-8?q?feature:json=E5=BA=8F=E5=88=97=E5=8C=96?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bnyer/auth}/config/JsonConfig.java | 4 +-- .../serializer/LongToStringSerializer.java | 2 +- .../com/bnyer/gateway/config/JsonConfig.java | 36 +++++++++++++++++++ .../serializer/LongToStringSerializer.java | 24 +++++++++++++ .../com/bnyer/order/config/JsonConfig.java | 36 +++++++++++++++++++ .../serializer/LongToStringSerializer.java | 24 +++++++++++++ .../java/com/bnyer/pay/config/JsonConfig.java | 36 +++++++++++++++++++ .../serializer/LongToStringSerializer.java | 24 +++++++++++++ 8 files changed, 183 insertions(+), 3 deletions(-) rename {bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core => bnyer-auth/src/main/java/com/bnyer/auth}/config/JsonConfig.java (93%) rename {bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core => bnyer-auth/src/main/java/com/bnyer/auth}/serializer/LongToStringSerializer.java (95%) create mode 100644 bnyer-gateway/src/main/java/com/bnyer/gateway/config/JsonConfig.java create mode 100644 bnyer-gateway/src/main/java/com/bnyer/gateway/serializer/LongToStringSerializer.java create mode 100644 bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/JsonConfig.java create mode 100644 bnyer-services/bnyer-order/src/main/java/com/bnyer/order/serializer/LongToStringSerializer.java create mode 100644 bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/config/JsonConfig.java create mode 100644 bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/serializer/LongToStringSerializer.java 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