You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by GitBox <gi...@apache.org> on 2018/06/25 12:00:42 UTC

[GitHub] liubao68 closed pull request #774: [SCB-685] Service comb chassis must support default values in query parameters

liubao68 closed pull request #774: [SCB-685] Service comb chassis must support default values in query parameters
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/774
 
 
   

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/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/AbstractParamProcessor.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/AbstractParamProcessor.java
index 8270da2541..509e03e8c4 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/AbstractParamProcessor.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/AbstractParamProcessor.java
@@ -24,9 +24,16 @@
 
   protected JavaType targetType;
 
-  public AbstractParamProcessor(String paramPath, JavaType targetType) {
+  protected Object defaultValue;
+
+  public Object getDefaultValue() {
+    return defaultValue;
+  }
+
+  public AbstractParamProcessor(String paramPath, JavaType targetType, Object defaultValue) {
     this.paramPath = paramPath;
     this.targetType = targetType;
+    this.defaultValue = defaultValue;
   }
 
   public String getParameterPath() {
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
index e002e4e72d..47768c7bda 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
@@ -28,14 +28,15 @@
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
+import io.swagger.models.parameters.CookieParameter;
 import io.swagger.models.parameters.Parameter;
 
 public class CookieProcessorCreator implements ParamValueProcessorCreator {
   public static final String PARAMTYPE = "cookie";
 
   public static class CookieProcessor extends AbstractParamProcessor {
-    public CookieProcessor(String paramPath, JavaType targetType) {
-      super(paramPath, targetType);
+    public CookieProcessor(String paramPath, JavaType targetType, Object defaultValue) {
+      super(paramPath, targetType, defaultValue);
     }
 
     @Override
@@ -49,6 +50,12 @@ public Object getValue(HttpServletRequest request) throws Exception {
       for (Cookie cookie : cookies) {
         if (paramPath.equals(cookie.getName())) {
           value = cookie.getValue();
+          if (value == null || value.equals("")) {
+            Object defaultValue = getDefaultValue();
+            if (defaultValue != null) {
+              value = defaultValue.toString();
+            }
+          }
         }
       }
 
@@ -73,6 +80,6 @@ public CookieProcessorCreator() {
   @Override
   public ParamValueProcessor create(Parameter parameter, Type genericParamType) {
     JavaType targetType = TypeFactory.defaultInstance().constructType(genericParamType);
-    return new CookieProcessor(parameter.getName(), targetType);
+    return new CookieProcessor(parameter.getName(), targetType, ((CookieParameter) parameter).getDefaultValue());
   }
 }
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/FormProcessorCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/FormProcessorCreator.java
index 78e5954044..58b3a672f8 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/FormProcessorCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/FormProcessorCreator.java
@@ -37,8 +37,8 @@
   public static final String PARAMTYPE = "formData";
 
   public static class FormProcessor extends AbstractParamProcessor {
-    public FormProcessor(String paramPath, JavaType targetType) {
-      super(paramPath, targetType);
+    public FormProcessor(String paramPath, JavaType targetType, Object defaultValue) {
+      super(paramPath, targetType, defaultValue);
     }
 
     @Override
@@ -76,9 +76,9 @@ public ParamValueProcessor create(Parameter parameter, Type genericParamType) {
     JavaType targetType = TypeFactory.defaultInstance().constructType(genericParamType);
 
     if (isPart(parameter)) {
-      return new PartProcessor(parameter.getName(), targetType);
+      return new PartProcessor(parameter.getName(), targetType, ((FormParameter) parameter).getDefaultValue());
     }
-    return new FormProcessor(parameter.getName(), targetType);
+    return new FormProcessor(parameter.getName(), targetType, ((FormParameter) parameter).getDefaultValue());
   }
 
   private boolean isPart(Parameter parameter) {
@@ -86,8 +86,8 @@ private boolean isPart(Parameter parameter) {
   }
 
   private static class PartProcessor extends AbstractParamProcessor {
-    PartProcessor(String paramPath, JavaType targetType) {
-      super(paramPath, targetType);
+    PartProcessor(String paramPath, JavaType targetType, Object defaultValue) {
+      super(paramPath, targetType, defaultValue);
     }
 
     @Override
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
index 43da110963..16b60567dc 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
@@ -31,6 +31,7 @@
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
+import io.swagger.models.parameters.HeaderParameter;
 import io.swagger.models.parameters.Parameter;
 
 public class HeaderProcessorCreator implements ParamValueProcessorCreator {
@@ -39,8 +40,8 @@
   public static final String PARAMTYPE = "header";
 
   public static class HeaderProcessor extends AbstractParamProcessor {
-    public HeaderProcessor(String paramPath, JavaType targetType) {
-      super(paramPath, targetType);
+    public HeaderProcessor(String paramPath, JavaType targetType, Object defaultValue) {
+      super(paramPath, targetType, defaultValue);
     }
 
     @Override
@@ -55,6 +56,12 @@ public Object getValue(HttpServletRequest request) throws Exception {
         value = Collections.list(headerValues);
       } else {
         value = request.getHeader(paramPath);
+        if (value == null || value.equals("")) {
+          Object defaultValue = getDefaultValue();
+          if (defaultValue != null) {
+            value = defaultValue;
+          }
+        }
       }
 
       return convertValue(value, targetType);
@@ -83,6 +90,6 @@ public HeaderProcessorCreator() {
   @Override
   public ParamValueProcessor create(Parameter parameter, Type genericParamType) {
     JavaType targetType = TypeFactory.defaultInstance().constructType(genericParamType);
-    return new HeaderProcessor(parameter.getName(), targetType);
+    return new HeaderProcessor(parameter.getName(), targetType, ((HeaderParameter) parameter).getDefaultValue());
   }
 }
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
index 11149ea436..b69db9f3ef 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
@@ -30,13 +30,14 @@
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
 import io.swagger.models.parameters.Parameter;
+import io.swagger.models.parameters.PathParameter;
 
 public class PathProcessorCreator implements ParamValueProcessorCreator {
   public static final String PARAMTYPE = "path";
 
   public static class PathProcessor extends AbstractParamProcessor {
-    public PathProcessor(String paramPath, JavaType targetType) {
-      super(paramPath, targetType);
+    public PathProcessor(String paramPath, JavaType targetType, Object defaultValue) {
+      super(paramPath, targetType, defaultValue);
     }
 
     @Override
@@ -72,6 +73,6 @@ public PathProcessorCreator() {
   @Override
   public ParamValueProcessor create(Parameter parameter, Type genericParamType) {
     JavaType targetType = TypeFactory.defaultInstance().constructType(genericParamType);
-    return new PathProcessor(parameter.getName(), targetType);
+    return new PathProcessor(parameter.getName(), targetType, ((PathParameter) parameter).getDefaultValue());
   }
 }
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/QueryProcessorCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/QueryProcessorCreator.java
index 44be24f7cf..908f512100 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/QueryProcessorCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/QueryProcessorCreator.java
@@ -27,13 +27,14 @@
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
 import io.swagger.models.parameters.Parameter;
+import io.swagger.models.parameters.QueryParameter;
 
 public class QueryProcessorCreator implements ParamValueProcessorCreator {
   public static final String PARAMTYPE = "query";
 
   public static class QueryProcessor extends AbstractParamProcessor {
-    public QueryProcessor(String paramPath, JavaType targetType) {
-      super(paramPath, targetType);
+    public QueryProcessor(String paramPath, JavaType targetType, Object defaultValue) {
+      super(paramPath, targetType, defaultValue);
     }
 
     @Override
@@ -43,6 +44,12 @@ public Object getValue(HttpServletRequest request) throws Exception {
         value = request.getParameterValues(paramPath);
       } else {
         value = request.getParameter(paramPath);
+        if (value == null || value.equals("")) {
+          Object defaultValue = getDefaultValue();
+          if (defaultValue != null) {
+            value = defaultValue;
+          }
+        }
       }
 
       return convertValue(value, targetType);
@@ -66,6 +73,6 @@ public QueryProcessorCreator() {
   @Override
   public ParamValueProcessor create(Parameter parameter, Type genericParamType) {
     JavaType targetType = TypeFactory.defaultInstance().constructType(genericParamType);
-    return new QueryProcessor(parameter.getName(), targetType);
+    return new QueryProcessor(parameter.getName(), targetType, ((QueryParameter) parameter).getDefaultValue());
   }
 }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
index 98fa39c09b..370543494c 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
@@ -45,7 +45,7 @@
   RestClientRequest clientRequest;
 
   private CookieProcessor createProcessor(String name, Class<?> type) {
-    return new CookieProcessor(name, TypeFactory.defaultInstance().constructType(type));
+    return new CookieProcessor(name, TypeFactory.defaultInstance().constructType(type), null);
   }
 
   private void createClientRequest() {
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
index efded340ef..a756940581 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
@@ -48,7 +48,7 @@
   RestClientRequest clientRequest;
 
   private FormProcessor createProcessor(String name, Class<?> type) {
-    return new FormProcessor(name, TypeFactory.defaultInstance().constructType(type));
+    return new FormProcessor(name, TypeFactory.defaultInstance().constructType(type), null);
   }
 
   private void createClientRequest() {
@@ -147,7 +147,8 @@ public void testGetValueList() throws Exception {
     };
 
     ParamValueProcessor processor =
-        new FormProcessor("name", TypeFactory.defaultInstance().constructCollectionType(List.class, String.class));
+        new FormProcessor("name", TypeFactory.defaultInstance().constructCollectionType(List.class, String.class),
+            null);
     Object value = processor.getValue(request);
     Assert.assertThat((List<String>) value, Matchers.contains("value"));
   }
@@ -163,7 +164,7 @@ public void testGetValueSet() throws Exception {
     };
 
     ParamValueProcessor processor =
-        new FormProcessor("name", TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class));
+        new FormProcessor("name", TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class), null);
     Object value = processor.getValue(request);
     Assert.assertThat((Set<String>) value, Matchers.contains("value"));
   }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
index cb3edb9884..667e53ba71 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
@@ -49,7 +49,7 @@
   RestClientRequest clientRequest;
 
   private HeaderProcessor createProcessor(String name, Class<?> type) {
-    return new HeaderProcessor(name, TypeFactory.defaultInstance().constructType(type));
+    return new HeaderProcessor(name, TypeFactory.defaultInstance().constructType(type), null);
   }
 
   private void createClientRequest() {
@@ -132,7 +132,8 @@ public void testGetValueList() throws Exception {
     };
 
     HeaderProcessor processor =
-        new HeaderProcessor("h1", TypeFactory.defaultInstance().constructCollectionType(List.class, String.class));
+        new HeaderProcessor("h1", TypeFactory.defaultInstance().constructCollectionType(List.class, String.class),
+            null);
     Object value = processor.getValue(request);
     Assert.assertThat((List<String>) value, Matchers.contains("h1v"));
   }
@@ -148,7 +149,7 @@ public void testGetValueSet() throws Exception {
     };
 
     HeaderProcessor processor =
-        new HeaderProcessor("h1", TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class));
+        new HeaderProcessor("h1", TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class), null);
     Object value = processor.getValue(request);
     Assert.assertThat((Set<String>) value, Matchers.contains("h1v"));
   }
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
index df051545c0..0fd25aec4a 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
@@ -43,7 +43,7 @@
   ParamValueProcessor processor;
 
   private void createProcessor(String name, Class<?> type) {
-    processor = new PathProcessor(name, TypeFactory.defaultInstance().constructType(type));
+    processor = new PathProcessor(name, TypeFactory.defaultInstance().constructType(type), null);
   }
 
   private void prepareGetValue(String name, Class<?> type) {
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
index 4ec5ffd038..75f1ee040f 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
@@ -34,7 +34,7 @@
   HttpServletRequest request;
 
   private ParamValueProcessor createProcessor(String name, Class<?> type) {
-    return new QueryProcessor(name, TypeFactory.defaultInstance().constructType(type));
+    return new QueryProcessor(name, TypeFactory.defaultInstance().constructType(type), null);
   }
 
   @Test
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
index 7b2add95ba..99fb72a9ca 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/SpringmvcClient.java
@@ -83,6 +83,8 @@ public static void run() {
       testController(templateUrlWithServiceName, microserviceName);
 
       testController();
+
+      testDefaultValues(templateUrlWithServiceName, microserviceName);
     }
     HttpHeaders headers = new HttpHeaders();
     headers.set("Accept-Encoding", "gzip");
@@ -103,12 +105,11 @@ public static void run() {
     @SuppressWarnings("unchecked")
     Map<String, Double> metrics = restTemplate.getForObject(prefix + "/metrics", Map.class);
 
-//    TestMgr.check(true, metrics.get("jvm(name=heapUsed,statistic=gauge)") != 0);
+    //    TestMgr.check(true, metrics.get("jvm(name=heapUsed,statistic=gauge)") != 0);
     TestMgr.check(true, metrics.size() > 0);
     TestMgr.check(true,
         metrics.get(
-            "servicecomb.invocation(operation=springmvc.codeFirst.saySomething,role=PRODUCER,stage=total,statistic=count,status=200,transport=highway)")
-            >= 0);
+            "servicecomb.invocation(operation=springmvc.codeFirst.saySomething,role=PRODUCER,stage=total,statistic=count,status=200,transport=highway)") >= 0);
 
     //prometheus integration test
     try {
@@ -217,4 +218,20 @@ private static void testConfigurationDuplicate() {
     TestMgr.check(DynamicPropertyFactory.getInstance().getStringProperty("servicecomb.test.duplicate1", "wrong").get(),
         "newer");
   }
+
+  private static void testDefaultValues(RestTemplate template, String microserviceName) {
+    String prefix = "cse://" + microserviceName;
+
+    TestMgr.check("hi test your age is : 20",
+        template.getForObject(prefix + "/default/sayhi",
+            String.class));
+
+    TestMgr.check("20",
+        template.getForObject(prefix + "/default/add",
+            String.class));
+
+    TestMgr.check("hei test",
+        template.getForObject(prefix + "/default/sayhei",
+            String.class));
+  }
 }
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/DefaultValues.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/DefaultValues.java
new file mode 100644
index 0000000000..42c73ab8e1
--- /dev/null
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/DefaultValues.java
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+package org.apache.servicecomb.demo.springmvc.server;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+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.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+
+@RestSchema(schemaId = "default")
+@RequestMapping(path = "/springmvc/default", produces = MediaType.APPLICATION_JSON)
+public class DefaultValues {
+  @GetMapping(path = "/add")
+  public int add(@RequestParam(name = "a", defaultValue = "10") int a,
+      @RequestParam(name = "b", defaultValue = "10") int b) {
+    return a + b;
+  }
+
+  @RequestMapping(path = "/sayhei", method = RequestMethod.GET)
+  public String sayHei(@RequestHeader(name = "name", defaultValue = "test") String name) {
+    return "hei " + name;
+  }
+
+  @GetMapping(path = "/sayhi")
+  @ApiImplicitParams({
+      @ApiImplicitParam(name = "name", paramType = "query", dataType = "string", defaultValue = "test"),
+      @ApiImplicitParam(name = "age", paramType = "query", dataType = "integer", defaultValue = "20")
+  })
+  public String sayHi(String name, int age) {
+    return "hi " + name + " your age is : " + age;
+  }
+}
diff --git a/samples/springmvc-sample/springmvc-consumer/src/main/java/org/apache/servicecomb/samples/springmvc/consumer/SpringmvcConsumerMain.java b/samples/springmvc-sample/springmvc-consumer/src/main/java/org/apache/servicecomb/samples/springmvc/consumer/SpringmvcConsumerMain.java
index 9f358a3727..a84d4d7624 100644
--- a/samples/springmvc-sample/springmvc-consumer/src/main/java/org/apache/servicecomb/samples/springmvc/consumer/SpringmvcConsumerMain.java
+++ b/samples/springmvc-sample/springmvc-consumer/src/main/java/org/apache/servicecomb/samples/springmvc/consumer/SpringmvcConsumerMain.java
@@ -51,9 +51,12 @@ public static void main(String[] args) throws Exception {
     // RestTemplate Consumer
     String sayHiResult =
         restTemplate.postForObject("cse://springmvc/springmvchello/sayhi?name=Java Chassis", null, String.class);
+    String sayHiDefaultResult =
+        restTemplate.postForObject("cse://springmvc/springmvchello/sayhi", null, String.class);
     String sayHelloResult = restTemplate.postForObject("cse://springmvc/springmvchello/sayhello", person, String.class);
     System.out.println("RestTemplate Consumer or POJO Consumer.  You can choose whatever you like.");
     System.out.println("RestTemplate consumer sayhi services: " + sayHiResult);
+    System.out.println("RestTemplate consumer sayHiDefault services: " + sayHiDefaultResult);
     System.out.println("RestTemplate consumer sayhello services: " + sayHelloResult);
 
     // POJO Consumer
@@ -70,8 +73,8 @@ public static void main(String[] args) throws Exception {
     HttpEntity<Person> entity = new HttpEntity<>(person);
     ListenableFuture<ResponseEntity<String>> listenableFuture = cseAsyncRestTemplate
         .exchange("cse://springmvc/springmvchello/sayhello", HttpMethod.POST, entity, String.class);
-//    ResponseEntity<String> responseEntity1 = listenableFuture.get();
-//    System.out.println("AsyncRestTemplate Consumer sayHello services: " + responseEntity1.getBody());
+    //    ResponseEntity<String> responseEntity1 = listenableFuture.get();
+    //    System.out.println("AsyncRestTemplate Consumer sayHello services: " + responseEntity1.getBody());
 
     listenableFuture.addCallback(
         new ListenableFutureCallback<ResponseEntity<String>>() {
@@ -84,8 +87,7 @@ public void onFailure(Throwable ex) {
           public void onSuccess(ResponseEntity<String> result) {
             System.out.println("AsyncRestTemplate Consumer sayHello services: " + result.getBody());
           }
-        }
-    );
+        });
   }
 
   public static void init() throws Exception {
diff --git a/samples/springmvc-sample/springmvc-provider/src/main/java/org/apache/servicecomb/samples/springmvc/provider/SpringmvcHelloImpl.java b/samples/springmvc-sample/springmvc-provider/src/main/java/org/apache/servicecomb/samples/springmvc/provider/SpringmvcHelloImpl.java
index 01ea8dfe15..c8d8087d80 100644
--- a/samples/springmvc-sample/springmvc-provider/src/main/java/org/apache/servicecomb/samples/springmvc/provider/SpringmvcHelloImpl.java
+++ b/samples/springmvc-sample/springmvc-provider/src/main/java/org/apache/servicecomb/samples/springmvc/provider/SpringmvcHelloImpl.java
@@ -33,7 +33,7 @@
 public class SpringmvcHelloImpl implements Hello {
   @Override
   @RequestMapping(path = "/sayhi", method = RequestMethod.POST)
-  public String sayHi(@RequestParam(name = "name") String name) {
+  public String sayHi(@RequestParam(name = "name", defaultValue = "test") String name) {
     return "Hello " + name;
   }
 
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractParameterProcessor.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractParameterProcessor.java
index d955a5aac6..234c5d7ca7 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractParameterProcessor.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractParameterProcessor.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.swagger.generator.core.processor.parameter;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.swagger.generator.core.OperationGenerator;
 import org.apache.servicecomb.swagger.generator.core.ParameterAnnotationProcessor;
 import org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
@@ -38,6 +39,7 @@ protected void fillParameter(Object annotation, OperationGenerator operationGene
       T parameter) {
     setParameterName(annotation, operationGenerator, paramIdx, parameter);
     setParameterType(operationGenerator, paramIdx, parameter);
+    setParameterDefaultValue(annotation, parameter);
   }
 
   protected void setParameterType(OperationGenerator operationGenerator, int paramIdx,
@@ -55,6 +57,18 @@ protected void setParameterName(Object annotation, OperationGenerator operationG
     parameter.setName(paramName);
   }
 
+  protected void setParameterDefaultValue(Object annotation, T parameter) {
+    String defaultValue = getAnnotationParameterDefaultValue(annotation);
+    if (StringUtils.isNotEmpty(defaultValue)) {
+      parameter.setDefaultValue(defaultValue);
+    }
+
+  }
+
+  protected String getAnnotationParameterDefaultValue(Object annotation) {
+    return "";
+  }
+
   protected abstract T createParameter();
 
   protected abstract String getAnnotationParameterName(Object annotation);
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/CookieValueAnnotationProcessor.java b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/CookieValueAnnotationProcessor.java
index 5209f06b75..a6139d05c7 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/CookieValueAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/CookieValueAnnotationProcessor.java
@@ -19,6 +19,7 @@
 
 import org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor;
 import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.ValueConstants;
 
 import io.swagger.models.parameters.CookieParameter;
 
@@ -32,4 +33,13 @@ protected String getAnnotationParameterName(Object annotation) {
   protected CookieParameter createParameter() {
     return new CookieParameter();
   }
+
+  @Override
+  protected String getAnnotationParameterDefaultValue(Object annotation) {
+    String defaultValue = ((CookieValue) annotation).defaultValue();
+    if (defaultValue.equals(ValueConstants.DEFAULT_NONE)) {
+      return "";
+    }
+    return defaultValue;
+  }
 }
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestHeaderAnnotationProcessor.java b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestHeaderAnnotationProcessor.java
index cdca36b4bb..c7f55a3213 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestHeaderAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestHeaderAnnotationProcessor.java
@@ -20,6 +20,7 @@
 import org.apache.servicecomb.swagger.generator.core.OperationGenerator;
 import org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor;
 import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.ValueConstants;
 
 import io.swagger.models.parameters.HeaderParameter;
 
@@ -42,4 +43,14 @@ protected void fillParameter(Object annotation, OperationGenerator operationGene
     RequestHeader requestHeader = (RequestHeader) annotation;
     parameter.setRequired(requestHeader.required());
   }
+  
+  @Override
+  protected String getAnnotationParameterDefaultValue(Object annotation) {
+    String defaultValue = ((RequestHeader) annotation).defaultValue();
+    if (defaultValue.equals(ValueConstants.DEFAULT_NONE)) {
+      return "";
+    }
+    return defaultValue;
+  }
+  
 }
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestParamAnnotationProcessor.java b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestParamAnnotationProcessor.java
index 71b2d14518..e947731077 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestParamAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestParamAnnotationProcessor.java
@@ -19,6 +19,7 @@
 
 import org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ValueConstants;
 
 import io.swagger.models.parameters.QueryParameter;
 
@@ -32,4 +33,13 @@ protected QueryParameter createParameter() {
   protected String getAnnotationParameterName(Object annotation) {
     return ((RequestParam) annotation).name();
   }
+
+  @Override
+  protected String getAnnotationParameterDefaultValue(Object annotation) {
+    String defaultValue = ((RequestParam) annotation).defaultValue();
+    if (defaultValue.equals(ValueConstants.DEFAULT_NONE)) {
+      return "";
+    }
+    return defaultValue;
+  }
 }


 

----------------------------------------------------------------
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:
users@infra.apache.org


With regards,
Apache Git Services