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/incubator-servicecomb-java-chassis.git
commit 8b9ea359760624c086f1e5fa373b7cc6f944334a Author: liubao <[email protected]> AuthorDate: Thu Aug 16 13:27:03 2018 +0800 [SCB-847]fix default value feature for primitive bugs. --- .../servicecomb/demo/jaxrs/client/JaxrsClient.java | 11 ++++--- .../demo/jaxrs/server/JaxRSDefaultValues.java | 22 ++++++++++++++ .../demo/springmvc/client/SpringmvcClient.java | 5 +++- .../springmvc/server/SpringMvcDefaultValues.java | 34 ++++++++++++++++++---- .../swagger/generator/core/OperationGenerator.java | 31 +++++++++----------- 5 files changed, 76 insertions(+), 27 deletions(-) diff --git a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java index ac13405..71407ef 100644 --- a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java +++ b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/JaxrsClient.java @@ -296,7 +296,7 @@ public class JaxrsClient { // Message dependends on locale, so just check the short part. // 'must be greater than or equal to 20', propertyPath=add.arg1, rootBeanClass=class org.apache.servicecomb.demo.jaxrs.server.Validator, messageTemplate='{javax.validation.constraints.Min.message}'}]] // ignored - Map data = (Map)e.getErrorData(); + Map data = (Map) e.getErrorData(); TestMgr.check( "[ConstraintViolationImpl{interpolatedMessage=", data.get("message").toString().substring(0, @@ -324,7 +324,7 @@ public class JaxrsClient { TestMgr.check(400, e.getStatus().getStatusCode()); TestMgr.check(Status.BAD_REQUEST, e.getReasonPhrase()); // Message dependends on locale, so just check the short part. - Map data = (Map)e.getErrorData(); + Map data = (Map) e.getErrorData(); TestMgr.check( "[ConstraintViolationImpl{interpolatedMessage=", data.get("message").toString().substring(0, @@ -359,7 +359,7 @@ public class JaxrsClient { TestMgr.check(400, e.getStatus().getStatusCode()); TestMgr.check(Status.BAD_REQUEST, e.getReasonPhrase()); // Message dependends on locale, so just check the short part. - Map data = (Map)e.getErrorData(); + Map data = (Map) e.getErrorData(); TestMgr.check( "[ConstraintViolationImpl{interpolatedMessage", data.get("message").toString().substring(0, @@ -438,6 +438,9 @@ public class JaxrsClient { TestMgr.check("Hello", result); result = template.postForObject(cseUrlPrefix + "/javaprimitivecomb", request, String.class); - TestMgr.check("Hello 00.0", result); + TestMgr.check("Hello nullnull", result); + + result = template.postForObject(cseUrlPrefix + "/allprimitivetypes", null, String.class); + TestMgr.check("Hello false,0,0,0,0,0,0.0,0.0,null", result); } } diff --git a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxRSDefaultValues.java b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxRSDefaultValues.java index aa8f461..5a2788e 100644 --- a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxRSDefaultValues.java +++ b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/JaxRSDefaultValues.java @@ -118,4 +118,26 @@ public class JaxRSDefaultValues { public String jaxRsJavaPrimitiveCombnation(@QueryParam("a") Integer a, @QueryParam("b") Float b) { return "Hello " + a + b; } + + @Path("/allprimitivetypes") + @POST + public String allprimitivetypes(@QueryParam("pBoolean") boolean pBoolean, + @QueryParam("pChar") char pChar, + @QueryParam("pByte") byte pByte, + @QueryParam("pShort") short pShort, + @QueryParam("pInt") int pInt, + @QueryParam("pLong") long pLong, + @QueryParam("pFloat") float pFloat, + @QueryParam("pDouble") double pDouble, + @QueryParam("pDoubleWrap") Double pDoubleWrap) { + return "Hello " + pBoolean + "," + + pChar + "," + + pByte + "," + + pShort + "," + + pInt + "," + + pLong + "," + + pFloat + "," + + pDouble + "," + + pDoubleWrap; + } } 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 d9bd62c..37aa870 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 @@ -363,6 +363,9 @@ public class SpringmvcClient { TestMgr.check("Hello", result); result = template.postForObject(cseUrlPrefix + "/javaprimitivecomb", null, String.class); - TestMgr.check("Hello 00.0", result); + TestMgr.check("Hello nullnull", result); + + result = template.postForObject(cseUrlPrefix + "/allprimitivetypes", null, String.class); + TestMgr.check("Hello false,0,0,0,0,0,0.0,0.0,null", result); } } diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java index 1c99505..d6b33eb 100644 --- a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java +++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java @@ -52,7 +52,8 @@ public class SpringMvcDefaultValues { } @GetMapping("/query2") - public String query2(@RequestParam(name = "e", required = false) int e, @RequestParam(name = "a", defaultValue = "20") int a, + public String query2(@RequestParam(name = "e", required = false) int e, + @RequestParam(name = "a", defaultValue = "20") int a, @RequestParam(name = "b", defaultValue = "bobo") String b, @RequestParam(name = "c", defaultValue = "40") Integer c, @Min(value = 20) @Max(value = 30) @RequestParam(name = "d", required = false) int d) { @@ -71,21 +72,44 @@ public class SpringMvcDefaultValues { } @PostMapping("/javaprimitivenumber") - public String springJavaPrimitiveNumber(@RequestParam(name = "a", required = false) float a, @RequestParam(name = "b", required = false) boolean b) { + public String springJavaPrimitiveNumber(@RequestParam(name = "a", required = false) float a, + @RequestParam(name = "b", required = false) boolean b) { return "Hello " + a + b; } @PostMapping("/javaprimitivestr") - public String springJavaPrimitiveStr(@RequestParam(name = "a", required = false) int a, @RequestParam(name = "b", required = false) String b) { + public String springJavaPrimitiveStr(@RequestParam(name = "a", required = false) int a, + @RequestParam(name = "b", required = false) String b) { if (b == null || b.equals("")) { return "Hello"; } return "Hello " + b + a; - } @PostMapping("/javaprimitivecomb") - public String springJavaPrimitiveCombination(@RequestParam(name = "a", required = false) Integer a, @RequestParam(name = "b", required = false) Float b) { + public String springJavaPrimitiveCombination(@RequestParam(name = "a", required = false) Integer a, + @RequestParam(name = "b", required = false) Float b) { return "Hello " + a + b; } + + @PostMapping("/allprimitivetypes") + public String allprimitivetypes(@RequestParam(name = "pBoolean", required = false) boolean pBoolean, + @RequestParam(name = "pChar", required = false) char pChar, + @RequestParam(name = "pByte", required = false) byte pByte, + @RequestParam(name = "pShort", required = false) short pShort, + @RequestParam(name = "pInt", required = false) int pInt, + @RequestParam(name = "pLong", required = false) long pLong, + @RequestParam(name = "pFloat", required = false) float pFloat, + @RequestParam(name = "pDouble", required = false) double pDouble, + @RequestParam(name = "pDoubleWrap", required = false) Double pDoubleWrap) { + return "Hello " + pBoolean + "," + + pChar + "," + + pByte + "," + + pShort + "," + + pInt + "," + + pLong + "," + + pFloat + "," + + pDouble + "," + + pDoubleWrap; + } } diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java index f8251f9..376a1b3 100644 --- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java +++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java @@ -277,13 +277,13 @@ public class OperationGenerator { Type[] parameterTypes = providerMethod.getGenericParameterTypes(); for (int paramIdx = 0; paramIdx < parameterTypes.length; paramIdx++) { int swaggerParamCount = providerParameters.size(); + Type type = parameterTypes[paramIdx]; // 根据annotation处理 Annotation[] paramAnnotations = allAnnotations[paramIdx]; - processByParameterAnnotation(paramAnnotations, paramIdx); + processByParameterAnnotation(paramAnnotations, paramIdx, type); if (isArgumentNotProcessed(swaggerParamCount)) { - Type type = parameterTypes[paramIdx]; // 是否需要根据参数类型处理,目标场景:httpRequest之类 processByParameterType(type, paramIdx); } @@ -299,7 +299,8 @@ public class OperationGenerator { return swaggerParamCount == providerParameters.size(); } - protected void processByParameterAnnotation(Annotation[] paramAnnotations, int paramIdx) { + @SuppressWarnings({"rawtypes", "unckecked"}) + protected void processByParameterAnnotation(Annotation[] paramAnnotations, int paramIdx, Type parameterType) { String defaultValue = null; Parameter parameter = null; for (Annotation annotation : paramAnnotations) { @@ -319,20 +320,16 @@ public class OperationGenerator { if (defaultValue != null) { ((AbstractSerializableParameter<?>) parameter).setDefaultValue(defaultValue); } else if ((((AbstractSerializableParameter<?>) parameter).getDefaultValue() == null) - && (!((AbstractSerializableParameter<?>) parameter).getRequired())) { //if required false then only take java primitive values as defaults - String type = ((AbstractSerializableParameter<?>) parameter).getType(); - switch (type) { - case "integer": - defaultValue = "0"; - break; - case "number": - defaultValue = "0.0"; - break; - case "boolean": - defaultValue = "false"; - break; - default: - defaultValue = null; + && (!((AbstractSerializableParameter<?>) parameter) + .getRequired())) { //if required false then only take java primitive values as defaults + if (parameterType instanceof Class && ((Class) parameterType).isPrimitive()) { + switch (parameterType.getTypeName()) { + case "boolean": + defaultValue = "false"; + break; + default: + defaultValue = "0"; + } } ((AbstractSerializableParameter<?>) parameter).setDefaultValue(defaultValue); }
