You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2024/02/23 03:21:40 UTC
(servicecomb-java-chassis) branch master updated: [#4237]Fix problems when scanning REST services with @RestController annotation (#4238)
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new fe13d4eb2 [#4237]Fix problems when scanning REST services with @RestController annotation (#4238)
fe13d4eb2 is described below
commit fe13d4eb252c9938a832a174df6f1bc2a10bc68d
Author: liubao68 <bi...@qq.com>
AuthorDate: Fri Feb 23 11:21:34 2024 +0800
[#4237]Fix problems when scanning REST services with @RestController annotation (#4238)
---
.../apache/servicecomb/swagger/SwaggerUtils.java | 8 ++++--
.../generator/core/AbstractSwaggerGenerator.java | 7 ++---
.../RestControllerClassAnnotationProcessor.java | 8 ++----
.../swagger/generator/springmvc/TestSpringmvc.java | 6 +++++
.../model/RestControllerWithPathSchema.java} | 31 +++++++---------------
...Path.yaml => RestControllerWithPathSchema.yaml} | 24 +++++++++++++----
.../swaggerTestTarget_ValueOverWritePath.yaml | 1 -
7 files changed, 46 insertions(+), 39 deletions(-)
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
index 85955c294..617aa7952 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
@@ -26,6 +26,7 @@ import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
@@ -81,8 +82,11 @@ public final class SwaggerUtils {
* Only ones servers and contains only base path.
*/
public static void setBasePath(OpenAPI swagger, String basePath) {
- if (swagger.getServers() == null || swagger.getServers().size() == 0) {
- swagger.setServers(List.of(new Server()));
+ if (swagger.getServers() == null) {
+ swagger.setServers(new ArrayList<>());
+ }
+ if (swagger.getServers().size() == 0) {
+ swagger.getServers().add(new Server());
}
swagger.getServers().get(0).setUrl(basePath);
}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java
index 17b491b52..5d1388641 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java
@@ -262,11 +262,12 @@ public abstract class AbstractSwaggerGenerator implements SwaggerGenerator {
@Override
public void setBasePath(String basePath) {
basePath = new PlaceholderResolver().replaceFirst(basePath);
- Server server = new Server();
- server.setUrl(basePath);
if (openAPI.getServers() == null) {
openAPI.setServers(new ArrayList<>());
}
- openAPI.getServers().add(server);
+ if (openAPI.getServers().size() == 0) {
+ openAPI.getServers().add(new Server());
+ }
+ openAPI.getServers().get(0).setUrl(basePath);
}
}
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RestControllerClassAnnotationProcessor.java b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RestControllerClassAnnotationProcessor.java
index 3671f2f20..66ac987a4 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RestControllerClassAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RestControllerClassAnnotationProcessor.java
@@ -19,14 +19,11 @@ package org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
import java.lang.reflect.Type;
-import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.SwaggerUtils;
import org.apache.servicecomb.swagger.generator.ClassAnnotationProcessor;
import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
import org.springframework.web.bind.annotation.RestController;
-import io.swagger.v3.oas.models.OpenAPI;
-
public class RestControllerClassAnnotationProcessor implements ClassAnnotationProcessor<RestController> {
@Override
public Type getProcessType() {
@@ -35,9 +32,8 @@ public class RestControllerClassAnnotationProcessor implements ClassAnnotationPr
@Override
public void process(SwaggerGenerator swaggerGenerator, RestController restController) {
- OpenAPI swagger = swaggerGenerator.getOpenAPI();
- if (StringUtils.isEmpty(SwaggerUtils.getBasePath(swagger))) {
- SwaggerUtils.setBasePath(swagger, "/");
+ if (SwaggerUtils.getBasePath(swaggerGenerator.getOpenAPI()) == null) {
+ swaggerGenerator.setBasePath("/");
}
}
}
diff --git a/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/TestSpringmvc.java b/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/TestSpringmvc.java
index db100a79c..7c79c8034 100644
--- a/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/TestSpringmvc.java
+++ b/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/TestSpringmvc.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.swagger.generator.springmvc;
import org.apache.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUtils;
import org.apache.servicecomb.swagger.generator.springmvc.model.DefaultParameterSchema;
+import org.apache.servicecomb.swagger.generator.springmvc.model.RestControllerWithPathSchema;
import org.apache.servicecomb.swagger.generator.springmvc.model.SwaggerTestTarget;
import org.apache.servicecomb.swagger.generator.springmvc.model.SwaggerTestTarget_ValueOverWritePath;
import org.junit.jupiter.api.Test;
@@ -136,6 +137,11 @@ public class TestSpringmvc {
UnitTestSwaggerUtils.testSwagger("schemas/DefaultParameterSchema.yaml", DefaultParameterSchema.class);
}
+ @Test
+ public void testRestControllerWithPathSchema() {
+ UnitTestSwaggerUtils.testSwagger("schemas/RestControllerWithPathSchema.yaml", RestControllerWithPathSchema.class);
+ }
+
@Test
public void swaggerTestTarget() {
UnitTestSwaggerUtils.testSwagger("schemas/swaggerTestTarget.yaml", SwaggerTestTarget.class);
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RestControllerClassAnnotationProcessor.java b/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/model/RestControllerWithPathSchema.java
similarity index 50%
copy from swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RestControllerClassAnnotationProcessor.java
copy to swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/model/RestControllerWithPathSchema.java
index 3671f2f20..c6553ba8c 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RestControllerClassAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/model/RestControllerWithPathSchema.java
@@ -14,30 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.servicecomb.swagger.generator.springmvc.model;
-package org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
-
-import java.lang.reflect.Type;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.servicecomb.swagger.SwaggerUtils;
-import org.apache.servicecomb.swagger.generator.ClassAnnotationProcessor;
-import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import io.swagger.v3.oas.models.OpenAPI;
-
-public class RestControllerClassAnnotationProcessor implements ClassAnnotationProcessor<RestController> {
- @Override
- public Type getProcessType() {
- return RestController.class;
- }
-
- @Override
- public void process(SwaggerGenerator swaggerGenerator, RestController restController) {
- OpenAPI swagger = swaggerGenerator.getOpenAPI();
- if (StringUtils.isEmpty(SwaggerUtils.getBasePath(swagger))) {
- SwaggerUtils.setBasePath(swagger, "/");
- }
+@RestController
+@RequestMapping("/prefix")
+public class RestControllerWithPathSchema {
+ @GetMapping("/testSimpleParam")
+ public String testSimpleParam(String strParam) {
+ return strParam;
}
}
diff --git a/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/swaggerTestTarget_ValueOverWritePath.yaml b/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/RestControllerWithPathSchema.yaml
similarity index 70%
copy from swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/swaggerTestTarget_ValueOverWritePath.yaml
copy to swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/RestControllerWithPathSchema.yaml
index d541ba60c..20786b5d6 100644
--- a/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/swaggerTestTarget_ValueOverWritePath.yaml
+++ b/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/RestControllerWithPathSchema.yaml
@@ -18,16 +18,30 @@
---
openapi: 3.0.1
info:
- title: swagger definition for org.apache.servicecomb.swagger.generator.springmvc.model.SwaggerTestTarget_ValueOverWritePath
+ title: swagger definition for org.apache.servicecomb.swagger.generator.springmvc.model.RestControllerWithPathSchema
version: 1.0.0
servers:
-- url: /testPath
-- url: /testValue
+- url: /prefix
paths:
- /:
+ /testSimpleParam:
get:
- operationId: method
+ operationId: testSimpleParam
+ parameters:
+ - name: strParam
+ in: query
+ schema:
+ type: string
responses:
"200":
description: response of 200
+ content:
+ application/json:
+ schema:
+ type: string
+ application/protobuf:
+ schema:
+ type: string
+ text/plain:
+ schema:
+ type: string
components: {}
diff --git a/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/swaggerTestTarget_ValueOverWritePath.yaml b/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/swaggerTestTarget_ValueOverWritePath.yaml
index d541ba60c..781f06649 100644
--- a/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/swaggerTestTarget_ValueOverWritePath.yaml
+++ b/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/swaggerTestTarget_ValueOverWritePath.yaml
@@ -21,7 +21,6 @@ info:
title: swagger definition for org.apache.servicecomb.swagger.generator.springmvc.model.SwaggerTestTarget_ValueOverWritePath
version: 1.0.0
servers:
-- url: /testPath
- url: /testValue
paths:
/: