You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/02/04 06:55:13 UTC
[dubbo-spi-extensions] 38/47: 彻底解决 #10 中的3号问题
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 2.7.x
in repository https://gitbox.apache.org/repos/asf/dubbo-spi-extensions.git
commit 1d0cb55f3c953b6a2092a4a69d68299bd4eea232
Author: qq213539 <21...@qq.com>
AuthorDate: Sat Jan 30 17:44:04 2021 +0800
彻底解决 #10 中的3号问题
---
.../core/DubboApiDocsAnnotationScanner.java | 25 ++++++++++++++++++++--
.../apidocs/core/beans/ApiParamsCacheItem.java | 13 +++++++++++
.../dubbo/apidocs/core/beans/HtmlTypeEnum.java | 10 +++++++++
.../apache/dubbo/apidocs/utils/ClassTypeUtil.java | 2 +-
4 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/DubboApiDocsAnnotationScanner.java b/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/DubboApiDocsAnnotationScanner.java
index f53f282..2114c26 100644
--- a/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/DubboApiDocsAnnotationScanner.java
+++ b/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/DubboApiDocsAnnotationScanner.java
@@ -55,8 +55,12 @@ import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -219,6 +223,12 @@ public class DubboApiDocsAnnotationScanner implements ApplicationListener<Applic
} else {
paramListItem.setRequired(false);
}
+
+ if (HtmlTypeEnum.TEXT_AREA.name().equals(paramListItem.getHtmlType())) {
+ List<ParamBean> apiParamsList = processField(argClass, parameterType, methodParameter);
+ paramListItem.setAllowableValues(apiParamsList.get(0).getAllowableValues());
+ paramListItem.setSubParamsJson(apiParamsList.get(0).getSubParamsJson());
+ }
}
}
apiParamsAndResp.setMethodParamInfo(methodParamInfoSb.toString());
@@ -273,8 +283,8 @@ public class DubboApiDocsAnnotationScanner implements ApplicationListener<Applic
paramBean.setRequired(false);
}
- if (this.processHtmlType(null == genericType ? field.getType() : genericType, requestParam, paramBean) == null) {
- // Not a basic type, handle as JSON
+ ParamBean tempParamBean = this.processHtmlType(null == genericType ? field.getType() : genericType, requestParam, paramBean);
+ if (tempParamBean == null || HtmlTypeEnum.TEXT_AREA.equals(tempParamBean.getHtmlType())) {
Object objResult;
if (null == genericType) {
objResult = ClassTypeUtil.initClassTypeWithDefaultValue(
@@ -362,7 +372,18 @@ public class DubboApiDocsAnnotationScanner implements ApplicationListener<Applic
} else if (Short.class.isAssignableFrom(classType) || short.class.isAssignableFrom(classType)) {
param.setHtmlType(HtmlTypeEnum.NUMBER_INTEGER);
processed = true;
+ } else if (Date.class.isAssignableFrom(classType) || LocalDateTime.class.isAssignableFrom(classType)) {
+ param.setHtmlType(HtmlTypeEnum.DATETIME_SELECTOR);
+ processed = true;
+ } else if (LocalDate.class.isAssignableFrom(classType)) {
+ param.setHtmlType(HtmlTypeEnum.DATE_SELECTOR);
+ processed = true;
+ } else if (classType.isArray() || Collection.class.isAssignableFrom(classType) ||
+ Map.class.isAssignableFrom(classType)) {
+ param.setHtmlType(HtmlTypeEnum.TEXT_AREA);
+ processed = true;
}
+
if (processed) {
// Processed, time to return
if (hasAllowableValues) {
diff --git a/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/beans/ApiParamsCacheItem.java b/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/beans/ApiParamsCacheItem.java
index 3571da2..bdd2a4c 100644
--- a/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/beans/ApiParamsCacheItem.java
+++ b/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/beans/ApiParamsCacheItem.java
@@ -45,6 +45,11 @@ public class ApiParamsCacheItem {
private Boolean required;
+ /**
+ * JSON string corresponding.
+ */
+ private String subParamsJson;
+
public String getName() {
return name;
}
@@ -132,4 +137,12 @@ public class ApiParamsCacheItem {
public void setRequired(Boolean required) {
this.required = required;
}
+
+ public String getSubParamsJson() {
+ return subParamsJson;
+ }
+
+ public void setSubParamsJson(String subParamsJson) {
+ this.subParamsJson = subParamsJson;
+ }
}
diff --git a/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/beans/HtmlTypeEnum.java b/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/beans/HtmlTypeEnum.java
index e5339f1..38bc8a0 100644
--- a/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/beans/HtmlTypeEnum.java
+++ b/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/core/beans/HtmlTypeEnum.java
@@ -55,6 +55,16 @@ public enum HtmlTypeEnum {
* Text area, which is generally used to show the JSON string of the Java Bean contained in the parameter.
*/
TEXT_AREA,
+
+ /**
+ * date selector.
+ */
+ DATE_SELECTOR,
+
+ /**
+ * datetime selector.
+ */
+ DATETIME_SELECTOR,
;
}
diff --git a/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/utils/ClassTypeUtil.java b/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/utils/ClassTypeUtil.java
index 7379ff9..ddd56e4 100644
--- a/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/utils/ClassTypeUtil.java
+++ b/dubbo-api-docs/dubbo-api-docs-core/src/main/java/org/apache/dubbo/apidocs/utils/ClassTypeUtil.java
@@ -172,7 +172,7 @@ public class ClassTypeUtil {
return result;
}
- private static Object initClassTypeWithDefaultValueNoProceeField(Type genericType, Class<?> classType, int processCount) {
+ public static Object initClassTypeWithDefaultValueNoProceeField(Type genericType, Class<?> classType, int processCount) {
if (Integer.class.isAssignableFrom(classType) || int.class.isAssignableFrom(classType)) {
return 0;
} else if (Byte.class.isAssignableFrom(classType) || byte.class.isAssignableFrom(classType)) {