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)) {