[ 
https://issues.apache.org/jira/browse/SCB-1031?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16698145#comment-16698145
 ] 

ASF GitHub Bot commented on SCB-1031:
-------------------------------------

liubao68 closed pull request #999: [SCB-1031] resolve @ApiOperator @Response 
override wrong, if the prev…
URL: https://github.com/apache/servicecomb-java-chassis/pull/999
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/samples/springmvc-sample/springmvc-provider/src/main/resources/META-INF/spring/springmvc.provider.bean.xml
 
b/samples/springmvc-sample/springmvc-provider/src/main/resources/META-INF/spring/springmvc.provider.bean.xml
index 568a45f33..998207518 100644
--- 
a/samples/springmvc-sample/springmvc-provider/src/main/resources/META-INF/spring/springmvc.provider.bean.xml
+++ 
b/samples/springmvc-sample/springmvc-provider/src/main/resources/META-INF/spring/springmvc.provider.bean.xml
@@ -19,7 +19,10 @@
 <beans xmlns="http://www.springframework.org/schema/beans";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xmlns:context="http://www.springframework.org/schema/context";
-  xsi:schemaLocation="http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd";>
+  xsi:schemaLocation="http://www.springframework.org/schema/beans
+                        
http://www.springframework.org/schema/beans/spring-beans.xsd
+                        http://www.springframework.org/schema/context
+                        
http://www.springframework.org/schema/context/spring-context.xsd";>
 
   <context:component-scan 
base-package="org.apache.servicecomb.samples.springmvc.provider"/>
 </beans>
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/annotation/AnnotationUtils.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/annotation/AnnotationUtils.java
index aebca2b29..2193f8e29 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/annotation/AnnotationUtils.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/annotation/AnnotationUtils.java
@@ -115,7 +115,7 @@ public static ResponseHeaderConfig convert(ResponseHeader 
responseHeader) {
   public static void addResponse(Swagger swagger, Operation operation, 
ApiOperation apiOperation) {
     ResponseConfig responseConfig = convert(apiOperation);
     generateResponse(swagger, responseConfig);
-    operation.response(responseConfig.getCode(), responseConfig.getResponse());
+    mergeResponse(operation, responseConfig);
   }
 
   public static void addResponse(Swagger swagger, ApiResponse apiResponse) {
@@ -127,7 +127,35 @@ public static void addResponse(Swagger swagger, 
ApiResponse apiResponse) {
   public static void addResponse(Swagger swagger, Operation operation, 
ApiResponse apiResponse) {
     ResponseConfig responseConfig = convert(apiResponse);
     generateResponse(swagger, responseConfig);
-    operation.response(responseConfig.getCode(), responseConfig.getResponse());
+    mergeResponse(operation, responseConfig);
+  }
+
+  private static void mergeResponse(Operation operation, ResponseConfig 
responseConfig) {
+    if (operation.getResponses() == null) {
+      operation.response(responseConfig.getCode(), 
responseConfig.getResponse());
+      return;
+    }
+    Response response = 
operation.getResponses().get(String.valueOf(responseConfig.getCode()));
+    if (response == null) {
+      operation.response(responseConfig.getCode(), 
responseConfig.getResponse());
+      return;
+    }
+    Response sourceResp = responseConfig.getResponse();
+    if (StringUtils.isNotEmpty(sourceResp.getDescription()) && 
StringUtils.isEmpty(response.getDescription())) {
+      response.setDescription(sourceResp.getDescription());
+    }
+    if (sourceResp.getSchema() != null && response.getSchema() == null) {
+      response.setSchema(sourceResp.getSchema());
+    }
+    if (sourceResp.getExamples() != null && response.getExamples() == null) {
+      response.setExamples(sourceResp.getExamples());
+    }
+    if (sourceResp.getHeaders() != null && response.getHeaders() == null) {
+      response.setHeaders(sourceResp.getHeaders());
+    }
+    if (sourceResp.getVendorExtensions() != null && 
response.getVendorExtensions() == null) {
+      response.setVendorExtensions(sourceResp.getVendorExtensions());
+    }
   }
 
   private static void generateResponse(Swagger swagger, ResponseConfig 
responseConfig) {
diff --git 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestOperationGenerator.java
 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestOperationGenerator.java
index 1b520bc9d..9fe126fdd 100644
--- 
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestOperationGenerator.java
+++ 
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/TestOperationGenerator.java
@@ -25,6 +25,8 @@
 import java.util.Collections;
 import java.util.List;
 
+import io.swagger.annotations.*;
+import io.swagger.models.Response;
 import org.apache.servicecomb.foundation.test.scaffolding.spring.SpringUtils;
 import org.apache.servicecomb.swagger.extend.parameter.HttpRequestParameter;
 import 
org.apache.servicecomb.swagger.generator.pojo.PojoSwaggerGeneratorContext;
@@ -32,7 +34,6 @@
 import org.junit.Test;
 import org.springframework.util.StringValueResolver;
 
-import io.swagger.annotations.ApiOperation;
 import io.swagger.models.parameters.BodyParameter;
 import io.swagger.models.parameters.Parameter;
 import io.swagger.models.parameters.QueryParameter;
@@ -121,11 +122,50 @@ public void addProviderParameter() throws 
NoSuchMethodException {
     Assert.assertNotSame(parameter, 
operationGenerator.getProviderParameters().get(2));
   }
 
+  @Test
+  public void testApiOperationAndResponse() throws NoSuchMethodException {
+    Method function = TestClass.class.getMethod("function");
+    SwaggerGenerator swaggerGenerator = new SwaggerGenerator(new 
PojoSwaggerGeneratorContext(), TestClass.class);
+    OperationGenerator operationGenerator = new 
OperationGenerator(swaggerGenerator, function);
+    operationGenerator.generate();
+    Response response = 
operationGenerator.getOperation().getResponses().get("200");
+    Assert.assertEquals("200 is ok............", response.getDescription());
+    Assert.assertNotNull(response.getHeaders().get("x-user-domain"));
+    Assert.assertNull(response.getHeaders().get("x-user-name"));
+    
Assert.assertNotNull(operationGenerator.getOperation().getVendorExtensions().get("x-class-name"));
+
+    Method function1 = TestClass.class.getMethod("function1");
+    SwaggerGenerator swaggerGenerator1 = new SwaggerGenerator(new 
PojoSwaggerGeneratorContext(), TestClass.class);
+    OperationGenerator operationGenerator1 = new 
OperationGenerator(swaggerGenerator1, function1);
+    operationGenerator1.generate();
+    Response response1 = 
operationGenerator1.getOperation().getResponses().get("200");
+    Assert.assertEquals("200 is ok............", response1.getDescription());
+    Assert.assertNull(response1.getHeaders().get("x-user-domain"));
+    Assert.assertNotNull(response1.getHeaders().get("x-user-name"));
+    
Assert.assertNotNull(operationGenerator1.getOperation().getVendorExtensions().get("x-class-name"));
+  }
+
   private static class TestClass {
-    @ApiOperation(value = "value1", tags = {"tag1", "tag2"})
+
+    @ApiResponse(code = 200, message = "200 is ok............", response = 
String.class,
+            responseHeaders = @ResponseHeader(name = "x-user-domain", response 
= String.class))
+    @ApiOperation(value = "value1", tags = {"tag1", "tag2"},
+            responseHeaders = {@ResponseHeader(name = "x-user-name", response 
= String.class),
+                    @ResponseHeader(name = "x-user-id", response = 
String.class)},
+            extensions= {@Extension(name="x-class-name", properties= 
{@ExtensionProperty(value="value", name = "key")})})
     public void function() {
     }
 
+
+    @ApiOperation(value = "value1", tags = {"tag1", "tag2"},
+            responseHeaders = {@ResponseHeader(name = "x-user-name", response 
= String.class),
+                    @ResponseHeader(name = "x-user-id", response = 
String.class)},
+            extensions= {@Extension(name="x-class-name", properties= 
{@ExtensionProperty(value="value", name = "key")})})
+    @ApiResponse(code = 200, message = "200 is ok............", response = 
String.class,
+            responseHeaders = @ResponseHeader(name = "x-user-domain", response 
= String.class))
+    public void function1() {
+    }
+
     @ApiOperation(value = "value2")
     public void functionWithNoTag() {
     }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> The Response's properties was overrided wrong between @APIOperation and 
> @Resoponse on the controller method
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: SCB-1031
>                 URL: https://issues.apache.org/jira/browse/SCB-1031
>             Project: Apache ServiceComb
>          Issue Type: Improvement
>          Components: Java-Chassis
>            Reporter: jeho0815
>            Assignee: jeho0815
>            Priority: Major
>
> @ApiResponse(code = 200, message = "200 is ok............", response = 
> String.class, responseHeaders = @ResponseHeader(name = "x-user-domain", 
> response = String.class))
>  @ApiOperation(nickname="getHelloworld", value="test", notes="this is a 
> test", response = Integer.class, code = 200, 
>  responseHeaders =
> {@ResponseHeader(name = "x-user-name", response = String.class), 
> @ResponseHeader(name = "x-user-id", response = String.class)}
> )
>  
> swagger 's response's descritpion will be default "resoponse of 200", the 
> best descritpion  should be "200 is ok............"



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to