files
);
diff --git a/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/req/StorySaveDTO.java b/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/req/StorySaveRequest.java
similarity index 89%
rename from sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/req/StorySaveDTO.java
rename to sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/req/StorySaveRequest.java
index 995ae1c7..d59f8ccf 100644
--- a/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/req/StorySaveDTO.java
+++ b/sop-example/example-story/src/main/java/com/gitee/sop/storyweb/open/req/StorySaveRequest.java
@@ -11,7 +11,7 @@ import java.util.Date;
* @author 六如
*/
@Data
-public class StorySaveDTO implements Serializable {
+public class StorySaveRequest implements Serializable {
private static final long serialVersionUID = -1214422742659231037L;
@NotBlank(message = "故事名称必填")
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/config/ApiConfig.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/config/ApiConfig.java
index b66cdac1..04f2e4e1 100644
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/config/ApiConfig.java
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/config/ApiConfig.java
@@ -88,7 +88,7 @@ public class ApiConfig {
private String zoneId = "Asia/Shanghai";
/**
- * 返回结果字段小写形式
+ * 字段下划线小写形式
*/
- private Boolean fieldLowercase = false;
+ private Boolean fieldSnakeCase = false;
}
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 efa140e8..32f520e4 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,13 +1,12 @@
package com.gitee.sop.gateway.config;
import com.gitee.sop.gateway.service.ParamExecutor;
-import com.gitee.sop.gateway.service.impl.ParamExecutorImpl;
import com.gitee.sop.gateway.service.RouteService;
-import com.gitee.sop.gateway.service.impl.RouteServiceImpl;
import com.gitee.sop.gateway.service.Serde;
+import com.gitee.sop.gateway.service.impl.ParamExecutorImpl;
+import com.gitee.sop.gateway.service.impl.RouteServiceImpl;
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;
import com.gitee.sop.gateway.service.manager.IsvManager;
@@ -99,13 +98,6 @@ public class GatewayConfig {
return new SerdeGsonImpl();
}
- // DEFAULT ROUTE INTERCEPTOR
- @Bean
- @ConditionalOnMissingBean
- public ResultRouteInterceptor resultRouteInterceptor() {
- return new ResultRouteInterceptor();
- }
-
@Bean
@ConditionalOnMissingBean
public ParamExecutor paramExecutor() {
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/RouteInterceptor.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptor.java
similarity index 84%
rename from sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/RouteInterceptor.java
rename to sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptor.java
index 42a21b5b..521ddf88 100644
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/RouteInterceptor.java
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptor.java
@@ -1,4 +1,4 @@
-package com.gitee.sop.gateway.service.interceptor;
+package com.gitee.sop.gateway.interceptor;
import com.gitee.sop.gateway.common.ApiInfoDTO;
import com.gitee.sop.gateway.request.ApiRequestContext;
@@ -12,6 +12,9 @@ public interface RouteInterceptor {
/**
* 在路由转发前执行,签名校验通过后会立即执行此方法
+ *
+ * 在这个方法中抛出异常会中断接口执行,直接返回错误信息
+ *
*
* @param context context
* @param apiInfoDTO 接口信息
@@ -24,7 +27,7 @@ public interface RouteInterceptor {
*
* @param context context
* @param apiInfoDTO 接口信息
- * @param result 返回结果,通常是HashMap
+ * @param result 业务返回结果,通常是HashMap
* @return 返回格式化后的结果, 可对原结果进行修改
*/
default Object afterRoute(ApiRequestContext context, ApiInfoDTO apiInfoDTO, Object result) {
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptorOrders.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptorOrders.java
new file mode 100644
index 00000000..96e4196f
--- /dev/null
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/RouteInterceptorOrders.java
@@ -0,0 +1,10 @@
+package com.gitee.sop.gateway.interceptor;
+
+/**
+ * @author 六如
+ */
+public class RouteInterceptorOrders {
+
+ public static final int RESULT_INTERCEPTOR = -1000;
+
+}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/internal/ResultRouteInterceptor.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/ResultRouteInterceptor.java
similarity index 90%
rename from sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/internal/ResultRouteInterceptor.java
rename to sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/ResultRouteInterceptor.java
index af6489ca..c999fb6b 100644
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/internal/ResultRouteInterceptor.java
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/interceptor/internal/ResultRouteInterceptor.java
@@ -1,11 +1,12 @@
-package com.gitee.sop.gateway.service.interceptor.internal;
+package com.gitee.sop.gateway.interceptor.internal;
import com.gitee.sop.gateway.common.ApiInfoDTO;
import com.gitee.sop.gateway.request.ApiRequestContext;
-import com.gitee.sop.gateway.service.interceptor.RouteInterceptor;
-import com.gitee.sop.gateway.service.interceptor.RouteInterceptorOrders;
+import com.gitee.sop.gateway.interceptor.RouteInterceptor;
+import com.gitee.sop.gateway.interceptor.RouteInterceptorOrders;
import com.gitee.sop.support.dto.CommonFileData;
import com.gitee.sop.support.dto.FileData;
+import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@@ -17,6 +18,7 @@ import java.util.Objects;
*
* @author 六如
*/
+@Component
public class ResultRouteInterceptor implements RouteInterceptor {
private static final String CLASS = "class";
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/response/ApiResponse.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/response/ApiResponse.java
index 2f900bd8..c71e9882 100644
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/response/ApiResponse.java
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/response/ApiResponse.java
@@ -3,7 +3,6 @@ package com.gitee.sop.gateway.response;
import com.gitee.sop.gateway.message.ErrorEnum;
import com.gitee.sop.gateway.message.IError;
import lombok.Data;
-import lombok.EqualsAndHashCode;
import java.util.Locale;
@@ -53,19 +52,41 @@ import java.util.Locale;
*
* @author 六如
*/
-@EqualsAndHashCode(callSuper = true)
@Data
-public class ApiResponse extends BaseResponse {
+public class ApiResponse implements Response {
+
+ public static final String SUCCESS_CODE = "0";
+ public static final String SUCCESS_MSG = "success";
+
+ /**
+ * 网关异常码,范围0~100 成功返回"0"
+ */
+ private String code = SUCCESS_CODE;
+
+ /**
+ * 网关异常信息
+ */
+ private String msg = "";
+
+ /**
+ * 返回对象
+ */
+ private Object data;
/**
* 业务异常码
*/
- private String subCode = "";
+ private String sub_code = "";
/**
* 业务异常信息
*/
- private String subMsg = "";
+ private String sub_msg = "";
+
+ /**
+ * 解决方案
+ */
+ private String solution;
public static ApiResponse success(Object data) {
ApiResponse apiResponse = new ApiResponse();
@@ -86,8 +107,8 @@ public class ApiResponse extends BaseResponse {
ApiResponse apiResponse = new ApiResponse();
apiResponse.setCode(error.getCode());
apiResponse.setMsg(error.getMsg());
- apiResponse.setSubCode(subCode);
- apiResponse.setSubMsg(subMsg);
+ apiResponse.setSub_code(subCode);
+ apiResponse.setSub_msg(subMsg);
apiResponse.setSolution(solution);
return apiResponse;
}
@@ -99,8 +120,8 @@ public class ApiResponse extends BaseResponse {
public static ApiResponse error(IError error) {
ApiResponse apiResponse = new ApiResponse();
- apiResponse.setSubCode(error.getSubCode());
- apiResponse.setSubMsg(error.getSubMsg());
+ apiResponse.setSub_code(error.getSubCode());
+ apiResponse.setSub_msg(error.getSubMsg());
apiResponse.setCode(error.getCode());
apiResponse.setMsg(error.getMsg());
apiResponse.setSolution(error.getSolution());
@@ -109,18 +130,7 @@ public class ApiResponse extends BaseResponse {
private static ApiResponse error(IError error, String subMsg) {
ApiResponse response = error(error);
- response.setSubMsg(subMsg);
+ response.setSub_msg(subMsg);
return response;
}
-
- public Response toLower() {
- ApiResponseLower apiResponseLower = new ApiResponseLower();
- apiResponseLower.setSub_code(this.subCode);
- apiResponseLower.setSub_msg(this.subMsg);
- apiResponseLower.setCode(this.subCode);
- apiResponseLower.setMsg(this.subMsg);
- apiResponseLower.setData(this.getData());
- apiResponseLower.setSolution(this.getSolution());
- return apiResponseLower;
- }
}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/response/ApiResponseLower.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/response/ApiResponseLower.java
deleted file mode 100644
index e7a95101..00000000
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/response/ApiResponseLower.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.gitee.sop.gateway.response;
-
-import com.gitee.sop.gateway.exception.ApiException;
-import com.gitee.sop.gateway.message.ErrorEnum;
-import com.gitee.sop.gateway.message.IError;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.Locale;
-
-
-/**
- * 默认的结果封装类.
- *
- *
- * xml返回结果:
- *
- * 50
- * Remote service error
- * isv.invalid-parameter
- * 非法参数
- *
- * 成功情况:
- *
- * 0
- * 成功消息
- *
- * ...返回内容
- *
- *
- *
- * json返回格式:
- * {
- * "code":"50",
- * "msg":"Remote service error",
- * "sub_code":"isv.invalid-parameter",
- * "sub_msg":"非法参数"
- * }
- * 成功情况:
- * {
- * "code":"0",
- * "msg":"成功消息内容。。。",
- * "data":{
- * ...返回内容
- * }
- * }
- *
- *
- * 字段说明:
- * code:网关异常码
- * msg:网关异常信息
- * sub_code:业务异常码
- * sub_msg:业务异常信息
- *
- * @author 六如
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class ApiResponseLower extends BaseResponse {
-
- /**
- * 业务异常码
- */
- private String sub_code = "";
-
- /**
- * 业务异常信息
- */
- private String sub_msg = "";
-
- public static ApiResponseLower success(Object data) {
- ApiResponseLower apiResponse = new ApiResponseLower();
- apiResponse.setCode(SUCCESS_CODE);
- apiResponse.setMsg(SUCCESS_MSG);
- apiResponse.setData(data);
- return apiResponse;
- }
-
-
- public static ApiResponseLower error(ApiException e) {
- IError error = e.getError();
- return error(error);
- }
-
- public static ApiResponseLower error(ErrorEnum errorEnum, Locale locale, String subMsg) {
- IError error = errorEnum.getError(locale);
- return error(error, subMsg);
- }
-
- public static ApiResponseLower error(ErrorEnum errorEnum, Locale locale) {
- IError error = errorEnum.getError(locale);
- return error(error);
- }
-
- public static ApiResponseLower error(IError error) {
- return error(error, error.getSubMsg());
- }
-
- public static ApiResponseLower error(IError error, String subMsg) {
- ApiResponseLower apiResponse = new ApiResponseLower();
- apiResponse.setSub_code(error.getSubCode());
- apiResponse.setSub_msg(error.getSubMsg());
- apiResponse.setCode(error.getCode());
- apiResponse.setMsg(subMsg);
- return apiResponse;
- }
-
-}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/response/BaseResponse.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/response/BaseResponse.java
deleted file mode 100644
index 44d28bcc..00000000
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/response/BaseResponse.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.gitee.sop.gateway.response;
-
-import lombok.Data;
-
-
-/**
- * @author 六如
- */
-@Data
-public class BaseResponse implements Response {
-
- public static final String SUCCESS_CODE = "0";
- public static final String SUCCESS_MSG = "success";
- /**
- * 网关异常码,范围0~100 成功返回"0"
- */
- private String code = SUCCESS_CODE;
-
- /**
- * 网关异常信息
- */
- private String msg = "";
-
- /**
- * 返回对象
- */
- private Object data;
-
- /**
- * 解决方案
- */
- private String solution;
-}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/response/NoCommonResponse.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/response/NoCommonResponse.java
index 2ec1a428..5e5bb79c 100644
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/response/NoCommonResponse.java
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/response/NoCommonResponse.java
@@ -5,7 +5,7 @@ package com.gitee.sop.gateway.response;
*
* @author 六如
*/
-public class NoCommonResponse extends BaseResponse {
+public class NoCommonResponse extends ApiResponse {
public static NoCommonResponse success(Object data) {
NoCommonResponse apiResponse = new NoCommonResponse();
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/Serde.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/Serde.java
index c7952002..d1e765fd 100644
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/Serde.java
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/Serde.java
@@ -1,14 +1,25 @@
package com.gitee.sop.gateway.service;
+import com.alibaba.fastjson2.JSONObject;
+
+import java.util.Map;
+
/**
- * 序列化
+ * 序列化/反序列化
*
* @author 六如
*/
public interface Serde {
- String toJSONString(Object object);
+ String toJson(Object object);
String toXml(Object object);
+ Map parseJson(String json);
+
+ default JSONObject parseObject(String json) {
+ Map jsonObj = parseJson(json);
+ return jsonObj instanceof JSONObject ? (JSONObject) jsonObj : new JSONObject(jsonObj);
+ }
+
}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java
index 1805a985..47705b43 100644
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/impl/ParamExecutorImpl.java
@@ -8,6 +8,7 @@ import com.gitee.sop.gateway.request.ApiRequest;
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.NoCommonResponse;
import com.gitee.sop.gateway.response.Response;
import com.gitee.sop.gateway.service.ParamExecutor;
import com.gitee.sop.gateway.service.Serde;
@@ -120,7 +121,7 @@ public class ParamExecutorImpl implements ParamExecutor params = new ArrayList<>();
for (ParamInfoDTO paramInfoDTO : paramInfoList) {
String type = paramInfoDTO.getType();
@@ -141,10 +149,13 @@ public class RouteServiceImpl implements RouteService {
} else {
if (ClassUtil.isPrimitive(type)) {
String paramName = paramInfoDTO.getName();
+ Object value = null;
try {
- Object value = jsonObject.getObject(paramName, ClassUtils.forName(type));
+ if (jsonObject != null) {
+ value = jsonObject.getObject(paramName, ClassUtils.forName(type));
+ jsonObject.remove(paramName);
+ }
params.add(value);
- jsonObject.remove(paramName);
} catch (ClassNotFoundException e) {
log.error("找不到参数class, paramInfoDTO={}, apiRequest={}", paramInfoDTO, apiRequest, e);
throw new RuntimeException("找不到class:" + type, e);
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
index 6a1b1088..c7b0879f 100644
--- 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
@@ -3,7 +3,12 @@ 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;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
/**
+ * 序列化/反序列化 gson实现
+ *
* @author 六如
*/
public class SerdeGsonImpl extends SerdeImpl {
@@ -11,12 +16,22 @@ public class SerdeGsonImpl extends SerdeImpl {
Gson gson;
@Override
- public String toJSONString(Object object) {
+ public String toJson(Object object) {
return gson.toJson(object);
}
@Override
- protected void doInit() {
- gson = new GsonBuilder().setDateFormat(dateFormat).create();
+ public Map parseJson(String json) {
+ return gson.fromJson(json, LinkedHashMap.class);
}
+
+
+ @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
index 1859cf1a..376063f5 100644
--- 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
@@ -1,27 +1,35 @@
package com.gitee.sop.gateway.service.impl;
import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.gitee.sop.gateway.config.ApiConfig;
import com.gitee.sop.gateway.service.Serde;
import com.gitee.sop.gateway.util.XmlUtil;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import javax.annotation.PostConstruct;
+import java.util.Collections;
+import java.util.Map;
/**
* @author 六如
*/
public class SerdeImpl implements Serde {
- static JSONWriter.Context context;
+ static JSONWriter.Context WRITE_CONTEXT;
+
+ @Autowired
+ protected ApiConfig apiConfig;
@Value("${gateway.serialize.date-format}")
protected String dateFormat;
@Override
- public String toJSONString(Object object) {
- return JSON.toJSONString(object, context);
+ public String toJson(Object object) {
+ return JSON.toJSONString(object);
}
@Override
@@ -33,10 +41,15 @@ public class SerdeImpl implements Serde {
}
}
+ @Override
+ public Map parseJson(String json) {
+ return JSON.parseObject(json);
+ }
+
@PostConstruct
public void init() {
- context = new JSONWriter.Context();
- context.setDateFormat(dateFormat);
+ WRITE_CONTEXT = new JSONWriter.Context();
+ WRITE_CONTEXT.setDateFormat(dateFormat);
this.doInit();
}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/RouteInterceptorOrders.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/RouteInterceptorOrders.java
deleted file mode 100644
index 1c9a3d9e..00000000
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/RouteInterceptorOrders.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.gitee.sop.gateway.service.interceptor;
-
-/**
- * @author 六如
- */
-public class RouteInterceptorOrders {
-
- public static final int RESULT_INTERCEPTOR = -1000;
- public static final int RESULT_WRAPPER_INTERCEPTOR = RESULT_INTERCEPTOR + 1;
-
-}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/internal/ResultWrapperInterceptor.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/internal/ResultWrapperInterceptor.java
deleted file mode 100644
index 215d035a..00000000
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/service/interceptor/internal/ResultWrapperInterceptor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.gitee.sop.gateway.service.interceptor.internal;
-
-import com.gitee.sop.gateway.common.ApiInfoDTO;
-import com.gitee.sop.gateway.config.ApiConfig;
-import com.gitee.sop.gateway.request.ApiRequestContext;
-import com.gitee.sop.gateway.response.ApiResponse;
-import com.gitee.sop.gateway.response.ApiResponseLower;
-import com.gitee.sop.gateway.service.interceptor.RouteInterceptor;
-import com.gitee.sop.gateway.service.interceptor.RouteInterceptorOrders;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.Objects;
-
-
-/**
- * 对结果进行包裹
- *
- * @author 六如
- */
-public class ResultWrapperInterceptor implements RouteInterceptor {
-
- @Autowired
- private ApiConfig apiConfig;
-
- @Override
- public Object afterRoute(ApiRequestContext context, ApiInfoDTO apiInfoDTO, Object result) {
- if (Objects.equals(apiConfig.getFieldLowercase(), true)) {
- return ApiResponseLower.success(result);
- } else {
- return ApiResponse.success(result);
- }
- }
-
- @Override
- public int getOrder() {
- return RouteInterceptorOrders.RESULT_WRAPPER_INTERCEPTOR;
- }
-}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/util/FieldUtil.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/util/FieldUtil.java
new file mode 100644
index 00000000..1ea675ae
--- /dev/null
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/util/FieldUtil.java
@@ -0,0 +1,46 @@
+package com.gitee.sop.gateway.util;
+
+/**
+ * @author 六如
+ */
+public class FieldUtil {
+
+ private static final String REGEX = "([a-z])([A-Z])";
+ private static final String REGEX_VAL = "$1_$2";
+ private static final char UNDERLINE = '_';
+
+
+ /**
+ * 驼峰转下划线
+ *
+ * @return 返回下划线
+ */
+ public static String camelCaseToSnakeCase(String name) {
+ return name.replaceAll(REGEX, REGEX_VAL).toLowerCase();
+ }
+
+ /**
+ * 下划线转驼峰
+ *
+ * @param param 内容
+ * @return 返回转换后的字符串
+ */
+ public static String snakeCaseToCamelCase(String param) {
+ if (param == null || param.trim().isEmpty()) {
+ return "";
+ }
+ int len = param.length();
+ StringBuilder sb = new StringBuilder(len);
+ for (int i = 0; i < len; i++) {
+ char c = param.charAt(i);
+ if (c == UNDERLINE) {
+ if (++i < len) {
+ sb.append(Character.toUpperCase(param.charAt(i)));
+ }
+ } else {
+ sb.append(c);
+ }
+ }
+ return sb.toString();
+ }
+}
diff --git a/sop-gateway/src/main/java/com/gitee/sop/gateway/util/JsonUtil.java b/sop-gateway/src/main/java/com/gitee/sop/gateway/util/JsonUtil.java
index 9a41ed96..d639f5c5 100644
--- a/sop-gateway/src/main/java/com/gitee/sop/gateway/util/JsonUtil.java
+++ b/sop-gateway/src/main/java/com/gitee/sop/gateway/util/JsonUtil.java
@@ -34,4 +34,5 @@ public class JsonUtil {
return JSON.parseArray(value, clazz);
}
+
}
diff --git a/sop-gateway/src/main/resources/application.properties b/sop-gateway/src/main/resources/application.properties
index 660bcce3..a435e472 100644
--- a/sop-gateway/src/main/resources/application.properties
+++ b/sop-gateway/src/main/resources/application.properties
@@ -1,5 +1,5 @@
spring.profiles.active=dev
-spring.application.name=sop-index
+spring.application.name=sop-gateway
server.port=8081
####### gateway config #######
@@ -40,8 +40,6 @@ api.timeout-seconds=300
api.timestamp-pattern=yyyy-MM-dd HH:mm:ss
# default zone
api.zone-id=Asia/Shanghai
-# if true, response field name all lowercase, such as : sub_code, sub_msg
-api.field-lowercase=false
####### dubbo config #######
dubbo.protocol.name=dubbo
diff --git a/sop-sdk/sdk-csharp/SDKCSharp/Client/OpenClient.cs b/sop-sdk/sdk-csharp/SDKCSharp/Client/OpenClient.cs
index f4a7ac67..3d4ef298 100644
--- a/sop-sdk/sdk-csharp/SDKCSharp/Client/OpenClient.cs
+++ b/sop-sdk/sdk-csharp/SDKCSharp/Client/OpenClient.cs
@@ -177,7 +177,7 @@ namespace SDKCSharp.Client
/// 返回的Response类
/// 请求对象
/// 返回Response类
- public virtual T Execute(BaseRequest request) where T : BaseResponse
+ public virtual Result Execute(BaseRequest request)
{
return this.Execute(request, null);
}
@@ -189,7 +189,7 @@ namespace SDKCSharp.Client
/// 请求对象
/// accessToken
/// 返回Response类
- public virtual T Execute(BaseRequest request, string accessToken) where T : BaseResponse
+ public virtual Result Execute(BaseRequest request, string accessToken)
{
RequestForm requestForm = request.CreateRequestForm(this.openConfig);
Dictionary form = requestForm.Form;
@@ -225,18 +225,12 @@ namespace SDKCSharp.Client
/// 服务器响应内容
/// 请求Request
/// 返回Response
- protected virtual T ParseResponse(string resp, BaseRequest request) where T: BaseResponse
+ protected virtual Result ParseResponse(string resp, BaseRequest request)
{
string method = request.Method;
string rootNodeName = this.dataNameBuilder.Build(method);
- string errorRootNode = openConfig.ErrorResponseName;
Dictionary responseData = JsonUtil.ParseToDictionary(resp);
- bool errorResponse = responseData.ContainsKey(errorRootNode);
- if (errorResponse)
- {
- rootNodeName = errorRootNode;
- }
- object data = responseData[rootNodeName];
+ object data = responseData.GetValueOrDefault(rootNodeName, null);
responseData.TryGetValue(openConfig.SignName, out object sign);
if (sign != null && !string.IsNullOrEmpty(publicKeyPlatform))
{
@@ -247,10 +241,8 @@ namespace SDKCSharp.Client
data = JsonUtil.ToJSONString(checkSignErrorResponse);
}
}
- string jsonData = data == null ? "{}" : data.ToString();
- T t = JsonUtil.ParseObject(jsonData);
- t.Body = jsonData;
- return t;
+ Result result = JsonUtil.ParseObject>(resp);
+ return result;
}
///
diff --git a/sop-sdk/sdk-csharp/SDKCSharp/Common/CustomDataNameBuilder.cs b/sop-sdk/sdk-csharp/SDKCSharp/Common/CustomDataNameBuilder.cs
index 8509468a..21b622d9 100644
--- a/sop-sdk/sdk-csharp/SDKCSharp/Common/CustomDataNameBuilder.cs
+++ b/sop-sdk/sdk-csharp/SDKCSharp/Common/CustomDataNameBuilder.cs
@@ -7,7 +7,7 @@ namespace SDKCSharp.Common
public class CustomDataNameBuilder: DataNameBuilder
{
- private string dataName = "result";
+ private string dataName = "data";
public CustomDataNameBuilder()
{
diff --git a/sop-sdk/sdk-csharp/SDKCSharp/Common/OpenConfig.cs b/sop-sdk/sdk-csharp/SDKCSharp/Common/OpenConfig.cs
index 7eee7261..0fe32d19 100644
--- a/sop-sdk/sdk-csharp/SDKCSharp/Common/OpenConfig.cs
+++ b/sop-sdk/sdk-csharp/SDKCSharp/Common/OpenConfig.cs
@@ -11,7 +11,7 @@ namespace SDKCSharp.Common
{
public class OpenConfig
{
- public static DataNameBuilder DATA_NAME_BUILDER = new DefaultDataNameBuilder();
+ public static DataNameBuilder DATA_NAME_BUILDER = new CustomDataNameBuilder();
///
/// 返回码成功值
diff --git a/sop-sdk/sdk-csharp/SDKCSharp/Program.cs b/sop-sdk/sdk-csharp/SDKCSharp/Program.cs
index 3591af77..7c3f4592 100644
--- a/sop-sdk/sdk-csharp/SDKCSharp/Program.cs
+++ b/sop-sdk/sdk-csharp/SDKCSharp/Program.cs
@@ -33,9 +33,7 @@ namespace SDKTest
{
TestGet();
Console.WriteLine("--------------------");
- TestCommon();
- Console.WriteLine("--------------------");
- TestUpload();
+ //TestUpload();
}
// 标准用法
@@ -49,54 +47,20 @@ namespace SDKTest
request.BizModel = model;
// 发送请求
- GetStoryResponse response = client.Execute(request);
+ Result result = client.Execute(request);
- if (response.IsSuccess())
+ if (result.IsSuccess())
{
// 返回结果
- Console.WriteLine("成功!response:{0}\n响应原始内容:{1}", JsonUtil.ToJSONString(response), response.Body);
+ Console.WriteLine("成功!response:{0}\n响应原始内容:{1}", JsonUtil.ToJSONString(result), result.Data);
}
else
{
Console.WriteLine("错误, code:{0}, msg:{1}, subCode:{2}, subMsg:{3}",
- response.Code, response.Msg, response.SubCode, response.SubMsg);
+ result.Code, result.Msg, result.SubCode, result.SubMsg);
}
}
- // 懒人版,如果不想添加Request,Response,Model。可以用这种方式,返回Dictionary,后续自己处理
- private static void TestCommon()
- {
- // 创建请求对象
- CommonRequest request = new CommonRequest("alipay.story.find");
- // 请求参数
- Dictionary bizModel = new Dictionary
- {
- ["name"] = "白雪公主"
- };
-
- request.BizModel = bizModel;
-
- // 发送请求
- CommonResponse response = client.Execute(request);
-
- if (response.IsSuccess())
- {
- // 返回结果
- string body = response.Body;
- Dictionary dict = JsonUtil.ParseToDictionary(body);
-
- Console.WriteLine("Dictionary内容:");
- foreach (var item in dict)
- {
- Console.WriteLine("{0}:{1}", item.Key, item.Value);
- }
- }
- else
- {
- Console.WriteLine("错误, code:{0}, msg:{1}, subCode:{2}, subMsg:{3}",
- response.Code, response.Msg, response.SubCode, response.SubMsg);
- }
- }
private static void TestUpload()
{
@@ -119,10 +83,10 @@ namespace SDKTest
request.AddFile(new UploadFile("file1", root + "/file1.txt"));
request.AddFile(new UploadFile("file2", root + "/file2.txt"));
- DemoFileUploadResponse response = client.Execute(request);
- if (response.IsSuccess())
+ Result result = client.Execute(request);
+ if (result.IsSuccess())
{
- List responseFiles = response.Files;
+ List responseFiles = result.Data.Files;
Console.WriteLine("您上传的文件信息:");
responseFiles.ForEach(file =>
{
@@ -133,7 +97,7 @@ namespace SDKTest
else
{
Console.WriteLine("错误, code:{0}, msg:{1}, subCode:{2}, subMsg:{3}",
- response.Code, response.Msg, response.SubCode, response.SubMsg);
+ result.Code, result.Msg, result.SubCode, result.SubMsg);
}
}
}
diff --git a/sop-sdk/sdk-csharp/SDKCSharp/Response/GetStoryResponse.cs b/sop-sdk/sdk-csharp/SDKCSharp/Response/GetStoryResponse.cs
index d97a0d50..8150e06a 100644
--- a/sop-sdk/sdk-csharp/SDKCSharp/Response/GetStoryResponse.cs
+++ b/sop-sdk/sdk-csharp/SDKCSharp/Response/GetStoryResponse.cs
@@ -3,7 +3,7 @@ using Newtonsoft.Json;
namespace SDKCSharp.Response
{
- public class GetStoryResponse: BaseResponse
+ public class GetStoryResponse
{
[JsonProperty("id")]
public int Id { get; set; }
diff --git a/sop-sdk/sdk-csharp/SDKCSharp/SDKCSharp.csproj b/sop-sdk/sdk-csharp/SDKCSharp/SDKCSharp.csproj
index 6e99da70..967612fe 100644
--- a/sop-sdk/sdk-csharp/SDKCSharp/SDKCSharp.csproj
+++ b/sop-sdk/sdk-csharp/SDKCSharp/SDKCSharp.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.0
+ netcoreapp6.0
diff --git a/sop-test/src/test/java/com/gitee/sop/test/AlipayClientPostTest.java b/sop-test/src/test/java/com/gitee/sop/test/AlipayClientPostTest.java
index fe98fc52..d8b3d67c 100644
--- a/sop-test/src/test/java/com/gitee/sop/test/AlipayClientPostTest.java
+++ b/sop-test/src/test/java/com/gitee/sop/test/AlipayClientPostTest.java
@@ -48,10 +48,10 @@ public class AlipayClientPostTest extends TestBase {
// 业务参数
Map bizContent = new HashMap<>();
- bizContent.put("out_trade_no", "70501111111S001111119");
- bizContent.put("total_amount", "9.00");
+ bizContent.put("outTradeNo", "70501111111S001111119");
+ bizContent.put("totalAmount", "9.00");
bizContent.put("subject", "衣服");
- bizContent.put("product_code", "QUICK_WAP_WAY");
+ bizContent.put("productCode", "QUICK_WAP_WAY");
params.put("biz_content", JSON.toJSONString(bizContent));
String content = AlipaySignature.getSignContent(params);
diff --git a/sop-test/src/test/java/com/gitee/sop/test/AllInOneTest.java b/sop-test/src/test/java/com/gitee/sop/test/AllInOneTest.java
index 5e708154..94c2a86f 100644
--- a/sop-test/src/test/java/com/gitee/sop/test/AllInOneTest.java
+++ b/sop-test/src/test/java/com/gitee/sop/test/AllInOneTest.java
@@ -146,7 +146,7 @@ public class AllInOneTest extends TestBase {
System.out.println(responseData);
String node = requestInfo.getDataNode();
JSONObject jsonObject = JSON.parseObject(responseData).getJSONObject(node);
- Assert.assertEquals("isv.route-no-permissions", jsonObject.getString("subCode"));
+ Assert.assertEquals("isv.route-no-permissions", jsonObject.getString("sub_code"));
});
//client.execute(requestBuilder);
@@ -231,7 +231,7 @@ public class AllInOneTest extends TestBase {
.callback((requestInfo, responseData) -> {
System.out.println(responseData);
JSONObject jsonObject = JSON.parseObject(responseData);
- Assert.assertEquals(jsonObject.getString("subCode"), "isv.invalid-file-size");
+ Assert.assertEquals(jsonObject.getString("sub_code"), "isv.invalid-file-size");
});
client.execute(requestBuilder);
@@ -252,7 +252,7 @@ public class AllInOneTest extends TestBase {
.callback((requestInfo, responseData) -> {
System.out.println(responseData);
JSONObject jsonObject = JSON.parseObject(responseData);
- Assert.assertEquals(jsonObject.getString("subCode"), "isv.invalid-file-size");
+ Assert.assertEquals(jsonObject.getString("sub_code"), "isv.invalid-file-size");
});
for (int i = 0; i < 20; i++) {
@@ -330,7 +330,7 @@ public class AllInOneTest extends TestBase {
.callback((requestInfo, responseData) -> {
System.out.println(responseData);
JSONObject jsonObject = JSON.parseObject(responseData);
- Assert.assertEquals("Nonexistent method name", jsonObject.getString("subMsg"));
+ Assert.assertEquals("Nonexistent method name", jsonObject.getString("sub_msg"));
});
client.execute(requestBuilder);
diff --git a/sop-website/sop-website-frontend/public/favicon.ico b/sop-website/sop-website-frontend/public/favicon.ico
index bef93d4b..91e1b1d9 100644
Binary files a/sop-website/sop-website-frontend/public/favicon.ico and b/sop-website/sop-website-frontend/public/favicon.ico differ
diff --git a/sop-website/sop-website-frontend/public/logo.png b/sop-website/sop-website-frontend/public/logo.png
new file mode 100644
index 00000000..3b1be259
Binary files /dev/null and b/sop-website/sop-website-frontend/public/logo.png differ
diff --git a/sop-website/sop-website-frontend/public/logo.svg b/sop-website/sop-website-frontend/public/logo.svg
deleted file mode 100644
index a63d2b1a..00000000
--- a/sop-website/sop-website-frontend/public/logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/sop-website/sop-website-frontend/src/layout/hooks/useNav.ts b/sop-website/sop-website-frontend/src/layout/hooks/useNav.ts
index 3d1341aa..0628249b 100644
--- a/sop-website/sop-website-frontend/src/layout/hooks/useNav.ts
+++ b/sop-website/sop-website-frontend/src/layout/hooks/useNav.ts
@@ -140,7 +140,7 @@ export function useNav() {
/** 获取`logo` */
function getLogo() {
- return new URL("/logo.svg", import.meta.url).href;
+ return new URL("/logo.png", import.meta.url).href;
}
return {