From 0498d0f7b5bf2e1ee5aa7ee30d75a19e71928583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=A6=82?= <8775@163.com> Date: Fri, 8 Nov 2024 10:29:14 +0800 Subject: [PATCH] 5.0 --- .../sop/storyweb/open/resp/StoryResponse.java | 3 ++ .../sop/gateway/config/GatewayConfig.java | 22 +++++++-- .../gitee/sop/gateway/service/SerdeImpl.java | 24 ---------- .../service/{ => impl}/ParamExecutorImpl.java | 6 +-- .../service/{ => impl}/ResultWrapperImpl.java | 3 +- .../service/{ => impl}/RouteServiceImpl.java | 5 +- .../gateway/service/impl/SerdeGsonImpl.java | 22 +++++++++ .../sop/gateway/service/impl/SerdeImpl.java | 47 +++++++++++++++++++ .../src/main/resources/application.properties | 4 ++ 9 files changed, 103 insertions(+), 33 deletions(-) delete mode 100644 sop-gateway/src/main/java/com/gitee/sop/gateway/service/SerdeImpl.java rename sop-gateway/src/main/java/com/gitee/sop/gateway/service/{ => impl}/ParamExecutorImpl.java (97%) rename sop-gateway/src/main/java/com/gitee/sop/gateway/service/{ => impl}/ResultWrapperImpl.java (95%) rename sop-gateway/src/main/java/com/gitee/sop/gateway/service/{ => impl}/RouteServiceImpl.java (98%) create mode 100644 sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/SerdeGsonImpl.java create mode 100644 sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/SerdeImpl.java diff --git a/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/resp/StoryResponse.java b/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/resp/StoryResponse.java index 124eaa49..fbdacbfc 100644 --- a/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/resp/StoryResponse.java +++ b/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/resp/StoryResponse.java @@ -3,6 +3,7 @@ package com.gitee.sop.storyweb.open.resp; import lombok.Data; import java.io.Serializable; +import java.util.Date; /** * @author 六如 @@ -15,4 +16,6 @@ public class StoryResponse implements Serializable { private String name; + // 日期格式要用Date,暂不支持LocalDateTime + private Date addTime = new Date(); } diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/config/GatewayConfig.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/config/GatewayConfig.java index 3eb32f65..efa140e8 100644 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/config/GatewayConfig.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/config/GatewayConfig.java @@ -1,11 +1,12 @@ package com.gitee.sop.gateway.config; import com.gitee.sop.gateway.service.ParamExecutor; -import com.gitee.sop.gateway.service.ParamExecutorImpl; +import com.gitee.sop.gateway.service.impl.ParamExecutorImpl; import com.gitee.sop.gateway.service.RouteService; -import com.gitee.sop.gateway.service.RouteServiceImpl; +import com.gitee.sop.gateway.service.impl.RouteServiceImpl; import com.gitee.sop.gateway.service.Serde; -import com.gitee.sop.gateway.service.SerdeImpl; +import com.gitee.sop.gateway.service.impl.SerdeGsonImpl; +import com.gitee.sop.gateway.service.impl.SerdeImpl; import com.gitee.sop.gateway.service.interceptor.internal.ResultRouteInterceptor; import com.gitee.sop.gateway.service.manager.ApiManager; import com.gitee.sop.gateway.service.manager.IsvApiPermissionManager; @@ -27,7 +28,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; -import java.util.Collections; /** * @author 六如 @@ -84,6 +84,20 @@ public class GatewayConfig { return new RedisIsvApiPermissionManagerImpl(); } + // 默认使用fastjson2序列化 + @Bean + @ConditionalOnProperty(value = "gateway.serialize.json-formatter", havingValue = "fastjson2", matchIfMissing = true) + public Serde serdeFastjson2() { + log.info("[init]使用fastjson2序列化"); + return new SerdeImpl(); + } + + @Bean + @ConditionalOnProperty(value = "gateway.serialize.json-formatter", havingValue = "gson") + public Serde serdeGson() { + log.info("[init]使用gson序列化"); + return new SerdeGsonImpl(); + } // DEFAULT ROUTE INTERCEPTOR @Bean diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/SerdeImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/SerdeImpl.java deleted file mode 100644 index b4765a8e..00000000 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/SerdeImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.gitee.sop.gateway.service; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.gitee.sop.gateway.util.JsonUtil; -import com.gitee.sop.gateway.util.XmlUtil; - -/** - * @author 六如 - */ -public class SerdeImpl implements Serde{ - @Override - public String toJSONString(Object object) { - return JsonUtil.toJSONString(object); - } - - @Override - public String toXml(Object object) { - try { - return XmlUtil.toXml(object); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - } -} diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/ParamExecutorImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java similarity index 97% rename from sop-gateway/src/main/java/com/gitee/sop/gateway/service/ParamExecutorImpl.java rename to sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java index bdee6ddb..1805a985 100644 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/ParamExecutorImpl.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java @@ -1,4 +1,4 @@ -package com.gitee.sop.gateway.service; +package com.gitee.sop.gateway.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; @@ -9,10 +9,10 @@ import com.gitee.sop.gateway.request.ApiRequestContext; import com.gitee.sop.gateway.request.RequestFormatEnum; import com.gitee.sop.gateway.request.UploadContext; import com.gitee.sop.gateway.response.Response; -import com.gitee.sop.gateway.util.JsonUtil; +import com.gitee.sop.gateway.service.ParamExecutor; +import com.gitee.sop.gateway.service.Serde; import com.gitee.sop.gateway.util.RequestUtil; import com.gitee.sop.gateway.util.ResponseUtil; -import com.gitee.sop.gateway.util.XmlUtil; import com.gitee.sop.support.dto.FileData; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/ResultWrapperImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ResultWrapperImpl.java similarity index 95% rename from sop-gateway/src/main/java/com/gitee/sop/gateway/service/ResultWrapperImpl.java rename to sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ResultWrapperImpl.java index d6e8b88e..55e31bd2 100644 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/ResultWrapperImpl.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ResultWrapperImpl.java @@ -1,4 +1,4 @@ -package com.gitee.sop.gateway.service; +package com.gitee.sop.gateway.service.impl; import com.gitee.sop.gateway.common.ApiInfoDTO; import com.gitee.sop.gateway.common.enums.YesOrNoEnum; @@ -8,6 +8,7 @@ import com.gitee.sop.gateway.response.ApiResponse; import com.gitee.sop.gateway.response.ApiResponseLower; import com.gitee.sop.gateway.response.NoCommonResponse; import com.gitee.sop.gateway.response.Response; +import com.gitee.sop.gateway.service.ResultWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/RouteServiceImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java similarity index 98% rename from sop-gateway/src/main/java/com/gitee/sop/gateway/service/RouteServiceImpl.java rename to sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java index dfcfa09e..2dcdd5b5 100644 --- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/RouteServiceImpl.java +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/RouteServiceImpl.java @@ -1,4 +1,4 @@ -package com.gitee.sop.gateway.service; +package com.gitee.sop.gateway.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; @@ -12,6 +12,9 @@ import com.gitee.sop.gateway.request.ApiRequestContext; import com.gitee.sop.gateway.request.UploadContext; import com.gitee.sop.gateway.response.ApiResponse; import com.gitee.sop.gateway.response.Response; +import com.gitee.sop.gateway.service.GenericServiceInvoker; +import com.gitee.sop.gateway.service.ResultWrapper; +import com.gitee.sop.gateway.service.RouteService; import com.gitee.sop.gateway.service.interceptor.RouteInterceptor; import com.gitee.sop.gateway.service.validate.Validator; import com.gitee.sop.gateway.util.ClassUtil; diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/SerdeGsonImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/SerdeGsonImpl.java new file mode 100644 index 00000000..6a1b1088 --- /dev/null +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/SerdeGsonImpl.java @@ -0,0 +1,22 @@ +package com.gitee.sop.gateway.service.impl; + +import com.alibaba.nacos.shaded.com.google.gson.Gson; +import com.alibaba.nacos.shaded.com.google.gson.GsonBuilder; + +/** + * @author 六如 + */ +public class SerdeGsonImpl extends SerdeImpl { + + Gson gson; + + @Override + public String toJSONString(Object object) { + return gson.toJson(object); + } + + @Override + protected void doInit() { + gson = new GsonBuilder().setDateFormat(dateFormat).create(); + } +} diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/SerdeImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/SerdeImpl.java new file mode 100644 index 00000000..1859cf1a --- /dev/null +++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/SerdeImpl.java @@ -0,0 +1,47 @@ +package com.gitee.sop.gateway.service.impl; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONWriter; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.gitee.sop.gateway.service.Serde; +import com.gitee.sop.gateway.util.XmlUtil; +import org.springframework.beans.factory.annotation.Value; + +import javax.annotation.PostConstruct; + +/** + * @author 六如 + */ +public class SerdeImpl implements Serde { + + static JSONWriter.Context context; + + @Value("${gateway.serialize.date-format}") + protected String dateFormat; + + @Override + public String toJSONString(Object object) { + return JSON.toJSONString(object, context); + } + + @Override + public String toXml(Object object) { + try { + return XmlUtil.toXml(object); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + @PostConstruct + public void init() { + context = new JSONWriter.Context(); + context.setDateFormat(dateFormat); + + this.doInit(); + } + + protected void doInit() { + + } +} diff --git a/sop-gateway/src/main/resources/application.properties b/sop-gateway/src/main/resources/application.properties index d6048187..660bcce3 100644 --- a/sop-gateway/src/main/resources/application.properties +++ b/sop-gateway/src/main/resources/application.properties @@ -15,6 +15,10 @@ gateway.manager.isv=${gateway.manager.cache-type} gateway.manager.secret=${gateway.manager.cache-type} # isv api permission manager,local/redis gateway.manager.isv-api-perm=${gateway.manager.cache-type} +# json serialize formatter: fastjson2/gson +gateway.serialize.json-formatter=fastjson2 +# serialize date format +gateway.serialize.date-format=yyyy-MM-dd HH:mm:ss ####### parameter name config ####### api.app-id-name=app_id