diff --git a/sop-common/sop-bridge-nacos/pom.xml b/sop-common/sop-bridge-nacos/pom.xml index 02e49bcf..98e2ee8b 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 3b04524b..2b7b2842 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 27ef9059..ccb8b7dd 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 b970d8bb..33f8c802 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) */