From 63aa6c06b8506891e531cbe5ab3bc8d0462b51f0 Mon Sep 17 00:00:00 2001 From: linwumingshi Date: Sat, 27 Jan 2024 20:45:02 +0800 Subject: [PATCH] feat: :sparkles: display parameters when using `@JsonSerialize(using = ToStringSerializer.class)` as strings --- .../doc/constants/DocAnnotationConstants.java | 10 +++++ .../com/ly/doc/helper/JsonBuildHelper.java | 31 ++++---------- .../java/com/ly/doc/model/DocJavaField.java | 12 ++++++ .../java/com/ly/doc/utils/JavaClassUtil.java | 40 +++++++++++-------- 4 files changed, 53 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/ly/doc/constants/DocAnnotationConstants.java b/src/main/java/com/ly/doc/constants/DocAnnotationConstants.java index 2006fb37..d31c9f7e 100644 --- a/src/main/java/com/ly/doc/constants/DocAnnotationConstants.java +++ b/src/main/java/com/ly/doc/constants/DocAnnotationConstants.java @@ -44,6 +44,16 @@ public interface DocAnnotationConstants { String SHORT_JSON_PROPERTY = "JsonProperty"; + /** + * com.fasterxml.jackson.databind.annotation.JsonSerialize + */ + String SHORT_JSON_SERIALIZE = "JsonSerialize"; + + /** + * the value of `@JsonSerialize(using = ToStringSerializer.class)` + */ + String TO_STRING_SERIALIZER_USING = "ToStringSerializer.class"; + /** * issue #484 gson alias annotation */ diff --git a/src/main/java/com/ly/doc/helper/JsonBuildHelper.java b/src/main/java/com/ly/doc/helper/JsonBuildHelper.java index 0576e096..247dd136 100644 --- a/src/main/java/com/ly/doc/helper/JsonBuildHelper.java +++ b/src/main/java/com/ly/doc/helper/JsonBuildHelper.java @@ -20,33 +20,18 @@ */ package com.ly.doc.helper; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - +import com.ly.doc.builder.ProjectDocConfigBuilder; import com.ly.doc.constants.DocAnnotationConstants; import com.ly.doc.constants.DocGlobalConstants; +import com.ly.doc.constants.DocTags; +import com.ly.doc.constants.ValidatorAnnotations; +import com.ly.doc.model.*; import com.ly.doc.utils.*; import com.power.common.util.CollectionUtil; import com.power.common.util.StringUtil; -import com.ly.doc.builder.ProjectDocConfigBuilder; -import com.ly.doc.constants.DocTags; -import com.ly.doc.constants.ValidatorAnnotations; -import com.ly.doc.model.ApiConfig; -import com.ly.doc.model.ApiReturn; -import com.ly.doc.model.CustomField; -import com.ly.doc.model.DocJavaField; -import com.ly.doc.model.DocJavaMethod; -import com.thoughtworks.qdox.model.DocletTag; -import com.thoughtworks.qdox.model.JavaAnnotation; -import com.thoughtworks.qdox.model.JavaClass; -import com.thoughtworks.qdox.model.JavaField; -import com.thoughtworks.qdox.model.JavaMethod; -import com.thoughtworks.qdox.model.JavaType; +import com.thoughtworks.qdox.model.*; + +import java.util.*; import static com.ly.doc.constants.DocTags.IGNORE_RESPONSE_BODY_ADVICE; @@ -281,7 +266,7 @@ public static String buildJson(String typeName, String genericCanonicalName, } } } - String typeSimpleName = field.getType().getSimpleName(); + String typeSimpleName = docField.getTypeSimpleName(); String fieldGicName = docField.getGenericCanonicalName(); CustomField.Key key = CustomField.Key.create(docField.getDeclaringClassName(), fieldName); diff --git a/src/main/java/com/ly/doc/model/DocJavaField.java b/src/main/java/com/ly/doc/model/DocJavaField.java index 08f65bb3..c8a42de1 100644 --- a/src/main/java/com/ly/doc/model/DocJavaField.java +++ b/src/main/java/com/ly/doc/model/DocJavaField.java @@ -93,6 +93,9 @@ public class DocJavaField { private String declaringClassName; + private String typeSimpleName; + + public static DocJavaField builder() { return new DocJavaField(); } @@ -240,4 +243,13 @@ public DocJavaField setGenericFullyQualifiedName(String genericFullyQualifiedNam this.genericFullyQualifiedName = genericFullyQualifiedName; return this; } + + public String getTypeSimpleName() { + return typeSimpleName; + } + + public DocJavaField setTypeSimpleName(String typeSimpleName) { + this.typeSimpleName = typeSimpleName; + return this; + } } diff --git a/src/main/java/com/ly/doc/utils/JavaClassUtil.java b/src/main/java/com/ly/doc/utils/JavaClassUtil.java index a24746f1..c28b6fbd 100644 --- a/src/main/java/com/ly/doc/utils/JavaClassUtil.java +++ b/src/main/java/com/ly/doc/utils/JavaClassUtil.java @@ -22,17 +22,17 @@ */ package com.ly.doc.utils; +import com.ly.doc.builder.ProjectDocConfigBuilder; import com.ly.doc.constants.*; import com.ly.doc.model.ApiConfig; import com.ly.doc.model.ApiDataDictionary; +import com.ly.doc.model.DocJavaField; +import com.ly.doc.model.torna.EnumInfo; +import com.ly.doc.model.torna.Item; import com.power.common.model.EnumDictionary; import com.power.common.util.CollectionUtil; import com.power.common.util.EnumUtil; import com.power.common.util.StringUtil; -import com.ly.doc.builder.ProjectDocConfigBuilder; -import com.ly.doc.model.DocJavaField; -import com.ly.doc.model.torna.EnumInfo; -import com.ly.doc.model.torna.Item; import com.thoughtworks.qdox.JavaProjectBuilder; import com.thoughtworks.qdox.model.*; import com.thoughtworks.qdox.model.expression.AnnotationValue; @@ -98,7 +98,7 @@ private static List getFields(JavaClass cls1, int counter, Map getFields(JavaClass cls1, int counter, Map recordComments = new HashMap<>(0); + Map recordComments = new HashMap<>(0); if (cls1.isRecord()) { - recordComments = DocUtil.getRecordCommentsByTag(cls1,DocTags.PARAM); + recordComments = DocUtil.getRecordCommentsByTag(cls1, DocTags.PARAM); } for (JavaField javaField : cls1.getFields()) { String fieldName = javaField.getName(); @@ -247,15 +247,20 @@ private static List getFields(JavaClass cls1, int counter, Map DocAnnotationConstants.SHORT_JSON_SERIALIZE.equals(annotation.getType().getSimpleName()) + && DocAnnotationConstants.TO_STRING_SERIALIZER_USING.equals(annotation.getNamedParameter("using"))); docJavaField.setComment(comment) .setJavaField(javaField) - .setFullyQualifiedName(subTypeName) - .setGenericCanonicalName(gicName) - .setGenericFullyQualifiedName(fieldType.getGenericFullyQualifiedName()) + .setFullyQualifiedName(isToString ? DocGlobalConstants.JAVA_STRING_FULLY: subTypeName) + .setGenericCanonicalName(isToString ? DocGlobalConstants.JAVA_STRING_FULLY : gicName) + .setGenericFullyQualifiedName(isToString ? DocGlobalConstants.JAVA_STRING_FULLY: fieldType.getGenericFullyQualifiedName()) .setActualJavaType(actualType) .setAnnotations(javaField.getAnnotations()) .setFieldName(fieldName) - .setDeclaringClassName(className); + .setDeclaringClassName(className) + .setTypeSimpleName(isToString ? DocGlobalConstants.JAVA_STRING_FULLY : javaField.getType().getSimpleName()); if (addedFields.containsKey(fieldName)) { addedFields.remove(fieldName); addedFields.put(fieldName, docJavaField); @@ -276,7 +281,8 @@ private static List getFields(JavaClass cls1, int counter, Map javaFields = javaClass.getEnumConstants(); StringBuilder stringBuilder = new StringBuilder(); for (JavaField javaField : javaFields) { - //string comment + // string comment String exception = javaField.getInitializationExpression(); stringBuilder.append(javaField.getName()); stringBuilder.append("(").append(exception).append(")").append("
"); @@ -415,7 +421,7 @@ public static EnumInfo getEnumInfo(JavaClass javaClass, ProjectDocConfigBuilder if (Objects.nonNull(javaClass.getTagByName(DocTags.IGNORE))) { return null; } - //todo support the field described by @see + // todo support the field described by @see ApiConfig apiConfig = builder.getApiConfig(); ClassLoader classLoader = apiConfig.getClassLoader();