From d22d2cb708c6387e01c8b7456b4dd4d5ee8759f8 Mon Sep 17 00:00:00 2001 From: ageer Date: Sat, 3 May 2025 14:31:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3/v3/api-d?= =?UTF-8?q?ocs=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../src/main/resources/application.yml | 35 +++++++++--------- .../src/main/resources/static/favicon.ico | Bin 0 -> 79819 bytes ...waggerConfig.java => SpringDocConfig.java} | 22 +++++------ ...operties.java => SpringDocProperties.java} | 4 +- .../common/doc/handler/OpenApiHandler.java | 27 +++++++------- ...ot.autoconfigure.AutoConfiguration.imports | 2 +- 7 files changed, 46 insertions(+), 46 deletions(-) create mode 100644 ruoyi-admin/src/main/resources/static/favicon.ico rename ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/{SwaggerConfig.java => SpringDocConfig.java} (86%) rename ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/properties/{SwaggerProperties.java => SpringDocProperties.java} (95%) diff --git a/pom.xml b/pom.xml index fada46eb..f0041fc3 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 17 8.0.33 3.5.16 - 2.1.0 + 2.8.5 0.15.0 5.2.3 3.2.1 diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index b30c848b..490efb23 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -215,20 +215,25 @@ mybatis-encryptor: publicKey: privateKey: -# Swagger配置 -swagger: +springdoc: + api-docs: + # 是否开启接口文档 + enabled: true + # swagger-ui: + # # 持久化认证数据 + # persistAuthorization: true info: # 标题 - title: '标题:${ruoyi.name}多租户管理系统_接口文档' + title: '标题:RuoYi-Vue-Plus多租户管理系统_接口文档' # 描述 description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...' # 版本 version: '版本号: ${ruoyi.version}' # 作者信息 contact: - name: ageerle - email: ageerle@163.com - url: https://gitee.com/ageerle/ruoyi-ai + name: Lion Li + email: crazylionli@163.com + url: https://gitee.com/dromara/RuoYi-Vue-Plus components: # 鉴权方式配置 security-schemes: @@ -236,24 +241,18 @@ swagger: type: APIKEY in: HEADER name: ${sa-token.token-name} - -springdoc: - api-docs: - # 是否开启接口文档 - enabled: true - swagger-ui: - # 持久化认证数据 - persistAuthorization: true #这里定义了两个分组,可定义多个,也可以不定义 group-configs: - group: 1.演示模块 - packages-to-scan: org.ruoyi.demo + packages-to-scan: org.dromara.demo - group: 2.通用模块 - packages-to-scan: org.ruoyi.web + packages-to-scan: org.dromara.web - group: 3.系统模块 - packages-to-scan: org.ruoyi.system + packages-to-scan: org.dromara.system - group: 4.代码生成模块 - packages-to-scan: org.ruoyi.generator + packages-to-scan: org.dromara.generator + - group: 5.工作流模块 + packages-to-scan: org.dromara.workflow # 防止XSS攻击 xss: diff --git a/ruoyi-admin/src/main/resources/static/favicon.ico b/ruoyi-admin/src/main/resources/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5db8e1d69791802d287625f7e5ff01ad9a7f6abc GIT binary patch literal 79819 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 z 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 literal 0 HcmV?d00001 diff --git a/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/SwaggerConfig.java b/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/SpringDocConfig.java similarity index 86% rename from ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/SwaggerConfig.java rename to ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/SpringDocConfig.java index fe95cbc2..9361297d 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/SwaggerConfig.java +++ b/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/SpringDocConfig.java @@ -6,7 +6,7 @@ import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.SecurityRequirement; import lombok.RequiredArgsConstructor; import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.doc.config.properties.SwaggerProperties; +import org.ruoyi.common.doc.config.properties.SpringDocProperties; import org.ruoyi.common.doc.handler.OpenApiHandler; import org.springdoc.core.configuration.SpringDocConfiguration; import org.springdoc.core.customizers.OpenApiBuilderCustomizer; @@ -36,26 +36,26 @@ import java.util.Set; */ @RequiredArgsConstructor @AutoConfiguration(before = SpringDocConfiguration.class) -@EnableConfigurationProperties(SwaggerProperties.class) +@EnableConfigurationProperties(SpringDocProperties.class) @ConditionalOnProperty(name = "springdoc.api-docs.enabled", havingValue = "true", matchIfMissing = true) -public class SwaggerConfig { +public class SpringDocConfig { private final ServerProperties serverProperties; @Bean @ConditionalOnMissingBean(OpenAPI.class) - public OpenAPI openApi(SwaggerProperties swaggerProperties) { + public OpenAPI openApi(SpringDocProperties properties) { OpenAPI openApi = new OpenAPI(); // 文档基本信息 - SwaggerProperties.InfoProperties infoProperties = swaggerProperties.getInfo(); + SpringDocProperties.InfoProperties infoProperties = properties.getInfo(); Info info = convertInfo(infoProperties); openApi.info(info); // 扩展文档信息 - openApi.externalDocs(swaggerProperties.getExternalDocs()); - openApi.tags(swaggerProperties.getTags()); - openApi.paths(swaggerProperties.getPaths()); - openApi.components(swaggerProperties.getComponents()); - Set keySet = swaggerProperties.getComponents().getSecuritySchemes().keySet(); + openApi.externalDocs(properties.getExternalDocs()); + openApi.tags(properties.getTags()); + openApi.paths(properties.getPaths()); + openApi.components(properties.getComponents()); + Set keySet = properties.getComponents().getSecuritySchemes().keySet(); List list = new ArrayList<>(); SecurityRequirement securityRequirement = new SecurityRequirement(); keySet.forEach(securityRequirement::addList); @@ -65,7 +65,7 @@ public class SwaggerConfig { return openApi; } - private Info convertInfo(SwaggerProperties.InfoProperties infoProperties) { + private Info convertInfo(SpringDocProperties.InfoProperties infoProperties) { Info info = new Info(); info.setTitle(infoProperties.getTitle()); info.setDescription(infoProperties.getDescription()); diff --git a/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/properties/SwaggerProperties.java b/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/properties/SpringDocProperties.java similarity index 95% rename from ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/properties/SwaggerProperties.java rename to ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/properties/SpringDocProperties.java index 057c70f7..66f80c70 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/properties/SwaggerProperties.java +++ b/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/config/properties/SpringDocProperties.java @@ -18,8 +18,8 @@ import java.util.List; * @author Lion Li */ @Data -@ConfigurationProperties(prefix = "swagger") -public class SwaggerProperties { +@ConfigurationProperties(prefix = "springdoc") +public class SpringDocProperties { /** * 文档基本信息 diff --git a/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/handler/OpenApiHandler.java b/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/handler/OpenApiHandler.java index 34aff596..48dd1acf 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/handler/OpenApiHandler.java +++ b/ruoyi-common/ruoyi-common-doc/src/main/java/org/ruoyi/common/doc/handler/OpenApiHandler.java @@ -11,6 +11,7 @@ import io.swagger.v3.oas.models.Paths; import io.swagger.v3.oas.models.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.ruoyi.common.core.utils.StreamUtils; import org.springdoc.core.customizers.OpenApiBuilderCustomizer; import org.springdoc.core.customizers.ServerBaseUrlCustomizer; import org.springdoc.core.properties.SpringDocConfigProperties; @@ -154,11 +155,11 @@ public class OpenApiHandler extends OpenAPIService { if (!CollectionUtils.isEmpty(tagsStr)) tagsStr = tagsStr.stream() - .map(str -> propertyResolverUtils.resolve(str, locale)) - .collect(Collectors.toSet()); + .map(str -> propertyResolverUtils.resolve(str, locale)) + .collect(Collectors.toSet()); if (springdocTags.containsKey(handlerMethod)) { - Tag tag = springdocTags.get(handlerMethod); + io.swagger.v3.oas.models.tags.Tag tag = springdocTags.get(handlerMethod); tagsStr.add(tag.getName()); if (openAPI.getTags() == null || !openAPI.getTags().contains(tag)) { openAPI.addTagsItem(tag); @@ -182,7 +183,7 @@ public class OpenApiHandler extends OpenAPIService { if (javadocProvider.isPresent()) { String description = javadocProvider.get().getClassJavadoc(handlerMethod.getBeanType()); if (StringUtils.isNotBlank(description)) { - Tag tag = new Tag(); + io.swagger.v3.oas.models.tags.Tag tag = new io.swagger.v3.oas.models.tags.Tag(); // 自定义部分 修改使用java注释当tag名 List list = IoUtil.readLines(new StringReader(description), new ArrayList<>()); @@ -203,7 +204,7 @@ public class OpenApiHandler extends OpenAPIService { if (!CollectionUtils.isEmpty(tags)) { // Existing tags - List openApiTags = openAPI.getTags(); + List openApiTags = openAPI.getTags(); if (!CollectionUtils.isEmpty(openApiTags)) tags.addAll(openApiTags); openAPI.setTags(new ArrayList<>(tags)); @@ -211,7 +212,7 @@ public class OpenApiHandler extends OpenAPIService { // Handle SecurityRequirement at operation level io.swagger.v3.oas.annotations.security.SecurityRequirement[] securityRequirements = securityParser - .getSecurityRequirements(handlerMethod); + .getSecurityRequirements(handlerMethod); if (securityRequirements != null) { if (securityRequirements.length == 0) operation.setSecurity(Collections.emptyList()); @@ -222,23 +223,23 @@ public class OpenApiHandler extends OpenAPIService { return operation; } - private void buildTagsFromMethod(Method method, Set tags, Set tagsStr, Locale locale) { + private void buildTagsFromMethod(Method method, Set tags, Set tagsStr, Locale locale) { // method tags Set tagsSet = AnnotatedElementUtils - .findAllMergedAnnotations(method, Tags.class); + .findAllMergedAnnotations(method, Tags.class); Set methodTags = tagsSet.stream() - .flatMap(x -> Stream.of(x.value())).collect(Collectors.toSet()); + .flatMap(x -> Stream.of(x.value())).collect(Collectors.toSet()); methodTags.addAll(AnnotatedElementUtils.findAllMergedAnnotations(method, io.swagger.v3.oas.annotations.tags.Tag.class)); if (!CollectionUtils.isEmpty(methodTags)) { - tagsStr.addAll(methodTags.stream().map(tag -> propertyResolverUtils.resolve(tag.name(), locale)).collect(Collectors.toSet())); + tagsStr.addAll(StreamUtils.toSet(methodTags, tag -> propertyResolverUtils.resolve(tag.name(), locale))); List allTags = new ArrayList<>(methodTags); addTags(allTags, tags, locale); } } - private void addTags(List sourceTags, Set tags, Locale locale) { - Optional> optionalTagSet = AnnotationsUtils - .getTags(sourceTags.toArray(new io.swagger.v3.oas.annotations.tags.Tag[0]), true); + private void addTags(List sourceTags, Set tags, Locale locale) { + Optional> optionalTagSet = AnnotationsUtils + .getTags(sourceTags.toArray(new io.swagger.v3.oas.annotations.tags.Tag[0]), true); optionalTagSet.ifPresent(tagsSet -> { tagsSet.forEach(tag -> { tag.name(propertyResolverUtils.resolve(tag.getName(), locale)); diff --git a/ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 97e76b80..14b745e1 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1 @@ -org.ruoyi.common.doc.config.SwaggerConfig +org.ruoyi.common.doc.config.SpringDocConfig