From 5b0f89a88f5578a9b107fcc6df2fd3dbe8b042d5 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Wed, 31 Jul 2024 21:57:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E9=83=A8?= =?UTF-8?q?=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpringDocAutoConfiguration.java | 123 +++++++++--------- .../apidoc/handler/OpenApiHandler.java | 5 +- .../starter/apidoc/util/EnumTypeUtils.java | 44 ++++--- .../MybatisPlusAutoConfiguration.java | 6 +- continew-starter-dependencies/pom.xml | 7 - 5 files changed, 94 insertions(+), 91 deletions(-) diff --git a/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/autoconfigure/SpringDocAutoConfiguration.java b/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/autoconfigure/SpringDocAutoConfiguration.java index 5e92dce..cfc97ef 100644 --- a/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/autoconfigure/SpringDocAutoConfiguration.java +++ b/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/autoconfigure/SpringDocAutoConfiguration.java @@ -56,6 +56,7 @@ import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * API 文档自动配置 @@ -141,7 +142,7 @@ public GlobalOpenApiCustomizer globalOpenApiCustomizer(SpringDocExtensionPropert } /** - * 自定义 openapi 处理器 + * 自定义 OpenApi 处理器 */ @Bean public OpenAPIService openApiBuilder(Optional openAPI, @@ -155,54 +156,35 @@ public OpenAPIService openApiBuilder(Optional openAPI, } /** - * 展示 枚举类型和值 + * 自定义参数配置(针对 BaseEnum 展示枚举值和描述) * - * @return + * @since 2.4.0 */ @Bean public ParameterCustomizer customParameterCustomizer() { return (parameterModel, methodParameter) -> { - // 判断方法参数类型是否为 IBaseEnum 的子类型 - if (ClassUtil.isAssignable(BaseEnum.class, methodParameter.getParameterType())) { - String description = parameterModel.getDescription(); - // TODO 会重复调用,有什么优雅的判读方式吗? - if (StrUtil.contains(description, "color:red")) { - return parameterModel; - } - Schema schema = parameterModel.getSchema(); - - // 获取方法参数类型的所有枚举常量 - BaseEnum[] enumConstants = (BaseEnum[])methodParameter.getParameterType().getEnumConstants(); - List list = new ArrayList<>(); - Map descMap = new HashMap<>(); - - // 遍历枚举常量,获取其值和描述 - for (BaseEnum constant : enumConstants) { - list.add(constant.getValue().toString()); - descMap.put(constant.getValue(), constant.getDescription()); - } - - // 枚举值类型 - String enumValueType = EnumTypeUtils.getEnumValueTypeAsString(methodParameter.getParameterType()); - schema.setType(enumValueType); - switch (enumValueType) { - case "integer" -> schema.setFormat("int32"); - case "long" -> schema.setFormat("int64"); - case "number" -> schema.setFormat("double"); - } - - // 设置枚举值列表和描述 - schema.setEnum(list); - parameterModel.setDescription(description + "" + descMap + ""); + Class parameterType = methodParameter.getParameterType(); + // 判断是否为 BaseEnum 的子类型 + if (!ClassUtil.isAssignable(BaseEnum.class, parameterType)) { + return parameterModel; + } + String description = parameterModel.getDescription(); + if (StrUtil.contains(description, "color:red")) { + return parameterModel; } + // 封装参数配置 + this.configureSchema(parameterModel.getSchema(), parameterType); + // 自定义枚举描述 + parameterModel.setDescription(description + "" + this + .getDescMap(parameterType) + ""); return parameterModel; }; } /** - * 展示 枚举类型和值 + * 自定义参数配置(针对 BaseEnum 展示枚举值和描述) * - * @return + * @since 2.4.0 */ @Bean public PropertyCustomizer customPropertyCustomizer() { @@ -216,36 +198,55 @@ public PropertyCustomizer customPropertyCustomizer() { } else { rawClass = Object.class; } - - // 检查原始类是否实现了 IBaseEnum 接口 - if (ClassUtil.isAssignable(BaseEnum.class, rawClass)) { - BaseEnum[] enumConstants = (BaseEnum[])rawClass.getEnumConstants(); - List list = new ArrayList<>(); - Map descMap = new HashMap<>(); - // 遍历枚举常量,获取其值和描述 - for (BaseEnum constant : enumConstants) { - list.add(constant.getValue().toString()); - descMap.put(constant.getValue(), constant.getDescription()); - } - // 获取泛型类型 - String enumValueType = EnumTypeUtils.getEnumValueTypeAsString(rawClass); - schema.setType(enumValueType); - // 根据枚举值类型设置 schema 的格式 - switch (enumValueType) { - case "integer" -> schema.setFormat("int32"); - case "long" -> schema.setFormat("int64"); - case "number" -> schema.setFormat("double"); - } - - // 设置枚举值列表和描述 - schema.setEnum(list); - schema.setDescription(schema.getDescription() + "" + descMap + ""); + // 判断是否为 BaseEnum 的子类型 + if (!ClassUtil.isAssignable(BaseEnum.class, rawClass)) { return schema; } + // 封装参数配置 + this.configureSchema(schema, rawClass); + // 自定义参数描述 + schema.setDescription(schema.getDescription() + "" + this + .getDescMap(rawClass) + ""); return schema; }; } + /** + * 封装 Schema 配置 + * + * @param schema Schema + * @param enumClass 枚举类型 + * @since 2.4.0 + */ + private void configureSchema(Schema schema, Class enumClass) { + BaseEnum[] enums = (BaseEnum[])enumClass.getEnumConstants(); + // 设置枚举可用值 + List valueList = Arrays.stream(enums).map(e -> e.getValue().toString()).toList(); + schema.setEnum(valueList); + // 设置枚举值类型和格式 + String enumValueType = EnumTypeUtils.getEnumValueTypeAsString(enumClass); + schema.setType(enumValueType); + switch (enumValueType) { + case "integer" -> schema.setFormat("int32"); + case "long" -> schema.setFormat("int64"); + case "number" -> schema.setFormat("double"); + default -> schema.setFormat(enumValueType); + } + } + + /** + * 获取枚举描述 Map + * + * @param enumClass 枚举类型 + * @return 枚举描述 Map + * @since 2.4.0 + */ + private Map getDescMap(Class enumClass) { + BaseEnum[] enums = (BaseEnum[])enumClass.getEnumConstants(); + return Arrays.stream(enums) + .collect(Collectors.toMap(BaseEnum::getValue, BaseEnum::getDescription, (a, b) -> a, LinkedHashMap::new)); + } + @PostConstruct public void postConstruct() { log.debug("[ContiNew Starter] - Auto Configuration 'ApiDoc' completed initialization."); diff --git a/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/handler/OpenApiHandler.java b/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/handler/OpenApiHandler.java index 36052c8..fca9c23 100644 --- a/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/handler/OpenApiHandler.java +++ b/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/handler/OpenApiHandler.java @@ -47,7 +47,10 @@ import java.util.stream.Stream; /** - * 自定义 openapi 处理器 对源码功能进行修改 增强使用 + * 自定义 OpenApi 处理器(对源码功能进行修改,增强使用) + * + * @author echo + * @since 2.4.0 */ @SuppressWarnings("all") public class OpenApiHandler extends OpenAPIService { diff --git a/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/util/EnumTypeUtils.java b/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/util/EnumTypeUtils.java index a84410a..5b6e04f 100644 --- a/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/util/EnumTypeUtils.java +++ b/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/util/EnumTypeUtils.java @@ -24,16 +24,19 @@ /** * 枚举类型工具 * - * @Author echo - * @date 2024/07/31 + * @author echo + * @since 2.4.0 */ public class EnumTypeUtils { + private EnumTypeUtils() { + } + /** - * 获取enum值类型 + * 获取枚举值类型 * - * @param enumClass enum class - * @return {@link String } + * @param enumClass 枚举类型 + * @return 枚举值类型 */ public static String getEnumValueTypeAsString(Class enumClass) { try { @@ -44,25 +47,26 @@ public static String getEnumValueTypeAsString(Class enumClass) { // 检查接口是否为参数化类型 if (type instanceof ParameterizedType parameterizedType) { // 检查接口的原始类型是否为 BaseEnum - if (parameterizedType.getRawType() == BaseEnum.class) { - Type actualType = parameterizedType.getActualTypeArguments()[0]; - // 检查实际类型参数是否为类类型 - if (actualType instanceof Class actualClass) { - if (actualClass == Integer.class) { - return "integer"; - } else if (actualClass == Long.class) { - return "long"; - } else if (actualClass == Double.class) { - return "number"; - } else if (actualClass == String.class) { - return "string"; - } + if (parameterizedType.getRawType() != BaseEnum.class) { + continue; + } + Type actualType = parameterizedType.getActualTypeArguments()[0]; + // 检查实际类型参数是否为类类型 + if (actualType instanceof Class actualClass) { + if (actualClass == Integer.class) { + return "integer"; + } else if (actualClass == Long.class) { + return "long"; + } else if (actualClass == Double.class) { + return "number"; + } else if (actualClass == String.class) { + return "string"; } } } } - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception ignored) { + // ignored } return "string"; } diff --git a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/continew/starter/data/mybatis/plus/autoconfigure/MybatisPlusAutoConfiguration.java b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/continew/starter/data/mybatis/plus/autoconfigure/MybatisPlusAutoConfiguration.java index 795f1ac..3f0c2d9 100644 --- a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/continew/starter/data/mybatis/plus/autoconfigure/MybatisPlusAutoConfiguration.java +++ b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/continew/starter/data/mybatis/plus/autoconfigure/MybatisPlusAutoConfiguration.java @@ -77,9 +77,11 @@ public MybatisPlusPropertiesCustomizer mybatisPlusPropertiesCustomizer() { public MybatisPlusInterceptor mybatisPlusInterceptor(MyBatisPlusExtensionProperties properties) { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 数据权限插件 - MyBatisPlusExtensionProperties.DataPermissionProperties dataPermissionProperties = properties.getDataPermission(); + MyBatisPlusExtensionProperties.DataPermissionProperties dataPermissionProperties = properties + .getDataPermission(); if (null != dataPermissionProperties && dataPermissionProperties.isEnabled()) { - interceptor.addInnerInterceptor(new DataPermissionInterceptor(SpringUtil.getBean(DataPermissionHandler.class))); + interceptor.addInnerInterceptor(new DataPermissionInterceptor(SpringUtil + .getBean(DataPermissionHandler.class))); } // 分页插件 MyBatisPlusExtensionProperties.PaginationProperties paginationProperties = properties.getPagination(); diff --git a/continew-starter-dependencies/pom.xml b/continew-starter-dependencies/pom.xml index c2e7454..f9f1c41 100644 --- a/continew-starter-dependencies/pom.xml +++ b/continew-starter-dependencies/pom.xml @@ -73,7 +73,6 @@ 1.6.0 2.43.0 3.11.0.3922 - 3.11.0 @@ -655,12 +654,6 @@ - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.verison} - org.codehaus.mojo