diff --git a/sop-common/sop-bridge-nacos/pom.xml b/sop-common/sop-bridge-nacos/pom.xml
index 02e49bcf9571a3be5d02fa4a63dc75d854f05d15..98e2ee8b1171add3bcac7696a947bdb898b92d36 100644
--- a/sop-common/sop-bridge-nacos/pom.xml
+++ b/sop-common/sop-bridge-nacos/pom.xml
@@ -11,6 +11,11 @@
4.0.0
sop-bridge-nacos
+
+ 2.2.5.RELEASE
+ 1.18.4
+
+
com.gitee.sop
@@ -21,11 +26,13 @@
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
+ ${spring-cloud-alibaba.version}
org.projectlombok
lombok
+ ${org.projectlombok.version}
provided
diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/result/BaseExecutorAdapter.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/result/BaseExecutorAdapter.java
index 3b04524be55cf80e8a8913adbb7e378d1ffa5922..2b7b2842e05309d613d2ecdd843333bb4450499b 100644
--- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/result/BaseExecutorAdapter.java
+++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/result/BaseExecutorAdapter.java
@@ -2,6 +2,7 @@ package com.gitee.sop.gatewaycommon.result;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONValidator;
import com.alibaba.fastjson.parser.Feature;
import com.gitee.sop.gatewaycommon.bean.ApiConfig;
import com.gitee.sop.gatewaycommon.bean.DefaultRouteInterceptorContext;
@@ -41,9 +42,11 @@ public abstract class BaseExecutorAdapter implements ResultExecutor
private static final String GATEWAY_CODE_NAME = "code";
private static final String GATEWAY_MSG_NAME = "msg";
+ private static final String GATEWAY_RESPONSE_NAME = "response";
private static final String ARRAY_START = "[";
private static final String ARRAY_END = "]";
private static final String ROOT_JSON = "{'items':%s}".replace("'", "\"");
+ private static final String SINGLE_ROOT_JSON = "{'single_response':%s}".replace("'", "\"");
static {
HTTP_STATUS_ERROR_ENUM_MAP.put(HttpStatus.OK.value(), ErrorEnum.SUCCESS);
@@ -205,6 +208,10 @@ public abstract class BaseExecutorAdapter implements ResultExecutor
if (serviceResult.startsWith(ARRAY_START) && serviceResult.endsWith(ARRAY_END)) {
return String.format(ROOT_JSON, serviceResult);
}
+ // 如果直接返回单个数据类型,需进行包装,变成:{"single_response": ...}
+ if (!JSONValidator.from(serviceResult).validate() || JSONValidator.from(serviceResult).getType() == JSONValidator.Type.Value) {
+ return String.format(SINGLE_ROOT_JSON, new StringBuilder(serviceResult).insert(0, "\"").append("\"").toString());
+ }
return serviceResult;
}
diff --git a/sop-example/sop-story/src/main/java/com/gitee/sop/storyweb/controller/Example1001_BaseController.java b/sop-example/sop-story/src/main/java/com/gitee/sop/storyweb/controller/Example1001_BaseController.java
index 27ef9059c1255faec2f34fed503bfe00849a7d50..ccb8b7dd8e4937a9d11f032513ad9d809b68453a 100644
--- a/sop-example/sop-story/src/main/java/com/gitee/sop/storyweb/controller/Example1001_BaseController.java
+++ b/sop-example/sop-story/src/main/java/com/gitee/sop/storyweb/controller/Example1001_BaseController.java
@@ -326,4 +326,16 @@ public class Example1001_BaseController {
return result;
}
+
+ @RequestMapping("/getStr")
+ @Open(value = "story.getStr", version = "1.0")
+ public String getStr() {
+ return "Hello SOP";
+ }
+
+ @RequestMapping("/getInt")
+ @Open(value = "story.getInt", version = "1.0")
+ public Integer getInt() {
+ return 666;
+ }
}
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 b970d8bbd1093caec669d520978a0e041c910c66..33f8c80237f74d9c02f1f8609f87349220b936f1 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
@@ -42,6 +42,31 @@ public class AllInOneTest extends TestBase {
client.execute(requestBuilder);
}
+ /**
+ * 以get方式提交 返回单值数据
+ */
+ public void testGetStr() {
+ Client.RequestBuilder requestBuilder = new Client.RequestBuilder()
+ .method("story.getStr")
+// .method("story.getInt")
+ .version("1.0")
+ .httpMethod(HttpTool.HTTPMethod.GET);
+
+ client.execute(requestBuilder);
+ }
+
+ /**
+ * 以get方式提交 返回List
+ */
+ public void testGetList() {
+ Client.RequestBuilder requestBuilder = new Client.RequestBuilder()
+ .method("story.list")
+ .version("1.0")
+ .httpMethod(HttpTool.HTTPMethod.GET);
+
+ client.execute(requestBuilder);
+ }
+
/**
* 以表单方式提交(application/x-www-form-urlencoded)
*/