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:
   /: