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 <[email protected]>
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:
/: