[3108] support @RequestMapping annotation (#3109)
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringMVCSchema.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringMVCSchema.java
index a4c8523..6368c57 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringMVCSchema.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringMVCSchema.java
@@ -23,6 +23,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
@@ -43,4 +44,16 @@
public String testApiExample(@RequestBody String name, HttpServletRequest request) {
return null;
}
+
+ @ApiResponses({
+ @ApiResponse(code = 200, response = String.class, message = "success",
+ examples = @Example({
+ @ExampleProperty(value = "wget http://localhost/springMvcSchema/testDefaultGetApiExample", mediaType = "text"),
+ @ExampleProperty(value = "{name:hello}", mediaType = "application/json"),
+ @ExampleProperty(value = "{name:hello}", mediaType = "json")})
+ )})
+ @RequestMapping(path = "/testDefaultGetApiExample")
+ public String testDefaultGetApiExample(@RequestParam String name, HttpServletRequest request) {
+ return null;
+ }
}
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestRestTemplate.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestRestTemplate.java
index 5b7ad37..74c7f7f 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestRestTemplate.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestRestTemplate.java
@@ -56,6 +56,9 @@
resultEntity = restTemplate
.getForEntity("servicecomb://springmvc/codeFirstSpringmvc/testVoidInRestTemplate", Void.class);
Assert.isTrue(200 == resultEntity.getStatusCodeValue(), "Void return type invocation failed");
+ resultEntity = restTemplate
+ .getForEntity("servicecomb://springmvc/codeFirstSpringmvc/testDefaultGetApiExample", Void.class);
+ Assert.isTrue(200 == resultEntity.getStatusCodeValue(), "Void return type invocation failed");
}
private void checkAllVoidTestResult() {
diff --git a/demo/demo-springmvc/springmvc-client/src/main/resources/SpringMVCSchema.yaml b/demo/demo-springmvc/springmvc-client/src/main/resources/SpringMVCSchema.yaml
index 6d80536..34031a9 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/resources/SpringMVCSchema.yaml
+++ b/demo/demo-springmvc/springmvc-client/src/main/resources/SpringMVCSchema.yaml
@@ -52,3 +52,20 @@
json: "{name:hello}"
schema:
type: "string"
+ /testDefaultGetApiExample:
+ get:
+ operationId: "testDefaultGetApiExample"
+ parameters:
+ - name: "name"
+ in: "query"
+ required: true
+ type: "string"
+ responses:
+ "200":
+ description: "success"
+ examples:
+ text: "wget http://localhost/springMvcSchema/testDefaultGetApiExample"
+ application/json: "{name:hello}"
+ json: "{name:hello}"
+ schema:
+ type: "string"
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
index 2633df0..072ff0d 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
@@ -560,4 +560,9 @@
response.setContent("returnOK");
return response;
}
+
+ @RequestMapping(path = "/testDefaultGetApiExample")
+ public void testDefaultGetApiExample() {
+ LOGGER.info("testDefaultGetApiExample() is called!");
+ }
}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/OperationGenerator.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/OperationGenerator.java
index b404a2f..01d54df 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/OperationGenerator.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/OperationGenerator.java
@@ -24,6 +24,8 @@
void setHttpMethod(String httpMethod);
+ String getHttpMethod();
+
void addMethodResponseHeader(String name, Property property);
void addOperationToSwagger();
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
index bd88314..2a1f118 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
@@ -127,6 +127,11 @@
}
@Override
+ public String getHttpMethod() {
+ return httpMethod;
+ }
+
+ @Override
public Operation getOperation() {
return swaggerOperation;
}
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestMappingMethodAnnotationProcessor.java b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestMappingMethodAnnotationProcessor.java
index 363be7d..b17505c 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestMappingMethodAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestMappingMethodAnnotationProcessor.java
@@ -19,9 +19,11 @@
import java.lang.reflect.Type;
+import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.generator.OperationGenerator;
import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
public class RequestMappingMethodAnnotationProcessor extends
AbstractHttpMethodMappingAnnotationProcessor<RequestMapping> {
@@ -39,7 +41,9 @@
doProcess(operationGenerator,
requestMapping.path(), requestMapping.value(),
- requestMapping.method().length == 0 ? null : requestMapping.method()[0],
+ requestMapping.method().length == 0 ?
+ (StringUtils.isEmpty(operationGenerator.getHttpMethod()) ? RequestMethod.GET : null) :
+ requestMapping.method()[0],
requestMapping.consumes(), requestMapping.produces());
}
}
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 c83cd55..47b10ec 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
@@ -78,9 +78,8 @@
@Test
public void testClassMethodNoHttpMetod() {
- UnitTestSwaggerUtils.testException(
- "HttpMethod must not both be empty in class and method, method=org.apache.servicecomb.swagger.generator.springmvc.ClassMethodNoHttpMethod:noHttpMethod.",
- ClassMethodNoHttpMethod.class);
+ UnitTestSwaggerUtils
+ .testSwagger("schemas/requestMappingHttpMethod.yaml", ClassMethodNoHttpMethod.class, "noHttpMethod");
}
@Test
diff --git a/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/requestMappingHttpMethod.yaml b/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/requestMappingHttpMethod.yaml
new file mode 100644
index 0000000..aea1166
--- /dev/null
+++ b/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/requestMappingHttpMethod.yaml
@@ -0,0 +1,36 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+---
+swagger: "2.0"
+info:
+ version: "1.0.0"
+ title: "swagger definition for org.apache.servicecomb.swagger.generator.springmvc.ClassMethodNoHttpMethod"
+ x-java-interface: "gen.cse.ms.ut.ClassMethodNoHttpMethodIntf"
+basePath: "/c"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+ /m:
+ get:
+ operationId: "noHttpMethod"
+ parameters: []
+ responses:
+ "200":
+ description: "response of 200"