You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2018/08/17 02:23:54 UTC
[incubator-servicecomb-java-chassis] 05/10: [SCB-847]fix default
value feature for primitive bugs.
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 <ba...@huawei.com>
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);
}