This commit is contained in:
六如
2024-11-08 10:29:14 +08:00
parent 9e05259d92
commit 0498d0f7b5
9 changed files with 103 additions and 33 deletions

View File

@@ -3,6 +3,7 @@ package com.gitee.sop.storyweb.open.resp;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
* @author 六如 * @author 六如
@@ -15,4 +16,6 @@ public class StoryResponse implements Serializable {
private String name; private String name;
// 日期格式要用Date,暂不支持LocalDateTime
private Date addTime = new Date();
} }

View File

@@ -1,11 +1,12 @@
package com.gitee.sop.gateway.config; package com.gitee.sop.gateway.config;
import com.gitee.sop.gateway.service.ParamExecutor; 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.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.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.interceptor.internal.ResultRouteInterceptor;
import com.gitee.sop.gateway.service.manager.ApiManager; import com.gitee.sop.gateway.service.manager.ApiManager;
import com.gitee.sop.gateway.service.manager.IsvApiPermissionManager; 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 org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.Collections;
/** /**
* @author 六如 * @author 六如
@@ -84,6 +84,20 @@ public class GatewayConfig {
return new RedisIsvApiPermissionManagerImpl(); 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 // DEFAULT ROUTE INTERCEPTOR
@Bean @Bean

View File

@@ -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);
}
}
}

View File

@@ -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.JSON;
import com.alibaba.fastjson2.JSONObject; 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.RequestFormatEnum;
import com.gitee.sop.gateway.request.UploadContext; import com.gitee.sop.gateway.request.UploadContext;
import com.gitee.sop.gateway.response.Response; 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.RequestUtil;
import com.gitee.sop.gateway.util.ResponseUtil; import com.gitee.sop.gateway.util.ResponseUtil;
import com.gitee.sop.gateway.util.XmlUtil;
import com.gitee.sop.support.dto.FileData; import com.gitee.sop.support.dto.FileData;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;

View File

@@ -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.ApiInfoDTO;
import com.gitee.sop.gateway.common.enums.YesOrNoEnum; 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.ApiResponseLower;
import com.gitee.sop.gateway.response.NoCommonResponse; import com.gitee.sop.gateway.response.NoCommonResponse;
import com.gitee.sop.gateway.response.Response; import com.gitee.sop.gateway.response.Response;
import com.gitee.sop.gateway.service.ResultWrapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -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.JSON;
import com.alibaba.fastjson2.JSONObject; 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.request.UploadContext;
import com.gitee.sop.gateway.response.ApiResponse; import com.gitee.sop.gateway.response.ApiResponse;
import com.gitee.sop.gateway.response.Response; 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.interceptor.RouteInterceptor;
import com.gitee.sop.gateway.service.validate.Validator; import com.gitee.sop.gateway.service.validate.Validator;
import com.gitee.sop.gateway.util.ClassUtil; import com.gitee.sop.gateway.util.ClassUtil;

View File

@@ -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();
}
}

View File

@@ -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() {
}
}

View File

@@ -15,6 +15,10 @@ gateway.manager.isv=${gateway.manager.cache-type}
gateway.manager.secret=${gateway.manager.cache-type} gateway.manager.secret=${gateway.manager.cache-type}
# isv api permission manager,local/redis # isv api permission manager,local/redis
gateway.manager.isv-api-perm=${gateway.manager.cache-type} 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 ####### ####### parameter name config #######
api.app-id-name=app_id api.app-id-name=app_id