pom.xml
@@ -21,7 +21,7 @@ <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version> <spring-boot.mybatis>2.2.2</spring-boot.mybatis> <druid.version>1.2.11</druid.version> <knife4j.version>3.0.3</knife4j.version> <springdoc.version>1.6.9</springdoc.version> <swagger-annotations.version>1.5.22</swagger-annotations.version> <poi.version>5.2.2</poi.version> <easyexcel.version>3.1.1</easyexcel.version> @@ -37,6 +37,7 @@ <dynamic-ds.version>3.5.1</dynamic-ds.version> <tlog.version>1.4.3</tlog.version> <xxl-job.version>2.3.1</xxl-job.version> <lombok.version>1.18.24</lombok.version> <!-- ç»ä¸ guava çæ¬ è§£å³é弿¼æ´é®é¢ --> <guava.version>30.0-jre</guava.version> @@ -87,13 +88,19 @@ <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.6.9</version> <version>${springdoc.version}</version> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-javadoc</artifactId> <version>1.6.9</version> <version>${springdoc.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <dependency> @@ -341,7 +348,7 @@ <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <version>${lombok.version}</version> </path> <path> <groupId>org.springframework.boot</groupId> ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
@@ -19,7 +19,6 @@ import com.ruoyi.sms.core.SmsTemplate; import com.ruoyi.sms.entity.SmsResult; import com.ruoyi.system.service.ISysConfigService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; @@ -39,7 +38,6 @@ @Anonymous @Slf4j @Validated @Tag(name = "éªè¯ç æä½å¤ç", description = "éªè¯ç 管ç") @RequiredArgsConstructor @RestController public class CaptchaController { ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
@@ -19,7 +19,6 @@ * * @author Lion Li */ @Tag(name = "ç¼åçæ§", description = "ç¼åçæ§ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/monitor/cache") ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
@@ -24,7 +24,6 @@ * @author Lion Li */ @Validated @Tag(name = "ç³»ç»è®¿é®è®°å½", description = "ç³»ç»è®¿é®è®°å½ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/monitor/logininfor") ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
@@ -24,7 +24,6 @@ * @author Lion Li */ @Validated @Tag(name = "æä½æ¥å¿è®°å½", description = "æä½æ¥å¿è®°å½ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/monitor/operlog") ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
@@ -28,7 +28,6 @@ * * @author Lion Li */ @Tag(name = "å¨çº¿ç¨æ·çæ§", description = "å¨çº¿ç¨æ·çæ§ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/monitor/online") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
@@ -25,7 +25,6 @@ * @author Lion Li */ @Validated @Tag(name = "åæ°é ç½®æ§å¶å¨", description = "åæ°é 置管ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/config") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
@@ -26,7 +26,6 @@ * @author Lion Li */ @Validated @Tag(name = "é¨é¨æ§å¶å¨", description = "é¨é¨ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/dept") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
@@ -12,7 +12,6 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.service.ISysDictTypeService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -27,7 +26,6 @@ * @author Lion Li */ @Validated @Tag(name = "æ°æ®åå ¸ä¿¡æ¯æ§å¶å¨", description = "æ°æ®åå ¸ä¿¡æ¯ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/dict/data") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
@@ -25,7 +25,6 @@ * @author Lion Li */ @Validated @Tag(name = "æ°æ®åå ¸ä¿¡æ¯æ§å¶å¨", description = "æ°æ®åå ¸ä¿¡æ¯ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/dict/type") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java
@@ -12,7 +12,6 @@ * * @author Lion Li */ @Tag(name ="é¦é¡µæ§å¶å¨", description = "é¦é¡µç®¡ç") @RequiredArgsConstructor @RestController public class SysIndexController { ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -33,7 +33,6 @@ * @author Lion Li */ @Validated @Tag(name = "ç»å½éªè¯æ§å¶å¨", description = "ç»å½éªè¯ç®¡ç") @RequiredArgsConstructor @RestController public class SysLoginController { ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
@@ -25,7 +25,6 @@ * @author Lion Li */ @Validated @Tag(name = "èåä¿¡æ¯æ§å¶å¨", description = "èåä¿¡æ¯ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/menu") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
@@ -20,7 +20,6 @@ * @author Lion Li */ @Validated @Tag(name = "å ¬åä¿¡æ¯æ§å¶å¨", description = "å ¬åä¿¡æ¯ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/notice") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java
@@ -31,7 +31,6 @@ * @date 2021-08-13 */ @Validated @Tag(name = "对象åå¨é ç½®æ§å¶å¨", description = "对象åå¨é 置管ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/oss/config") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java
@@ -40,7 +40,6 @@ * @author Lion Li */ @Validated @Tag(name = "对象å卿§å¶å¨", description = "对象åå¨ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/oss") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
@@ -11,7 +11,6 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.service.ISysPostService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -25,7 +24,6 @@ * @author Lion Li */ @Validated @Tag(name ="å²ä½ä¿¡æ¯æ§å¶å¨", description = "å²ä½ä¿¡æ¯ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/post") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
@@ -31,7 +31,6 @@ * @author Lion Li */ @Validated @Tag(name = "ä¸ªäººä¿¡æ¯æ§å¶å¨", description = "个人信æ¯ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/user/profile") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
@@ -19,7 +19,6 @@ * @author Lion Li */ @Validated @Tag(name = "注åéªè¯æ§å¶å¨", description = "注åéªè¯ç®¡ç") @RequiredArgsConstructor @RestController public class SysRegisterController extends BaseController { ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -32,7 +32,6 @@ * @author Lion Li */ @Validated @Tag(name = "è§è²ä¿¡æ¯æ§å¶å¨", description = "è§è²ä¿¡æ¯ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/role") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -45,7 +45,6 @@ * @author Lion Li */ @Validated @Tag(name = "ç¨æ·ä¿¡æ¯æ§å¶å¨", description = "ç¨æ·ä¿¡æ¯ç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/system/user") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/MailController.java
@@ -18,7 +18,6 @@ * @author Michelle.Chung */ @Validated @Tag(name = "é®ä»¶åéæ¡ä¾", description = "é®ä»¶åéæ¡ä¾") @RequiredArgsConstructor @RestController @RequestMapping("/demo/mail") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisCacheController.java
@@ -20,7 +20,6 @@ */ // ç±»çº§å« ç¼åç»ä¸é ç½® //@CacheConfig(cacheNames = "redissonCacheMap") @Tag(name = "spring-cache æ¼ç¤ºæ¡ä¾", description = "spring-cache æ¼ç¤ºæ¡ä¾") @RequiredArgsConstructor @RestController @RequestMapping("/demo/cache") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java
@@ -20,7 +20,6 @@ * * @author shenxinquan */ @Tag(name = "æµè¯åå¸å¼éçæ ·ä¾", description = "æµè¯åå¸å¼éçæ ·ä¾") @Slf4j @RestController @RequestMapping("/demo/redisLock") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java
@@ -13,7 +13,6 @@ * * @author Lion Li */ @Tag(name = "Redisåå¸è®¢é æ¼ç¤ºæ¡ä¾", description = "Redisåå¸è®¢é ") @RequiredArgsConstructor @RestController @RequestMapping("/demo/redis/pubsub") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisRateLimiterController.java
@@ -15,7 +15,6 @@ * * @author Lion Li */ @Tag(name = "æµè¯åå¸å¼éæµæ ·ä¾", description = "æµè¯åå¸å¼éæµæ ·ä¾") @Slf4j @RestController @RequestMapping("/demo/rateLimiter") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/SmsController.java
@@ -22,7 +22,6 @@ * @version 4.2.0 */ @Validated @Tag(name = "çä¿¡æ¼ç¤ºæ¡ä¾", description = "çä¿¡æ¼ç¤ºæ¡ä¾") @RequiredArgsConstructor @RestController @RequestMapping("/demo/sms") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/Swagger3DemoController.java
@@ -14,7 +14,6 @@ * * @author Lion Li */ @Tag(name = "æ¼ç¤ºswagger3æ§å¶å¨", description = "æ¼ç¤ºswagger3æ¥å£") @RestController @RequestMapping("/swagger/demo") public class Swagger3DemoController { ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java
@@ -5,7 +5,6 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.demo.domain.TestDemo; import com.ruoyi.demo.mapper.TestDemoMapper; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -21,7 +20,6 @@ * @author Lion Li * @date 2021-05-30 */ @Tag(name = "æµè¯æ¹éæ¹æ³", description = "æµè¯æ¹éæ¹æ³") @RequiredArgsConstructor @RestController @RequestMapping("/demo/batch") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java
@@ -41,7 +41,6 @@ * @date 2021-07-26 */ @Validated @Tag(name = "æµè¯å表æ§å¶å¨", description = "æµè¯å表管ç") @RequiredArgsConstructor @RestController @RequestMapping("/demo/demo") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestExcelController.java
@@ -20,7 +20,6 @@ * * @author Lion Li */ @Tag(name = "æµè¯Excelåè½", description = "æµè¯Excelåè½") @RestController @RequestMapping("/demo/excel") public class TestExcelController { ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestI18nController.java
@@ -20,7 +20,6 @@ * @author Lion Li */ @Validated @Tag(name = "æµè¯å½é åæ§å¶å¨", description = "æµè¯å½é å管ç") @RestController @RequestMapping("/demo/i18n") public class TestI18nController { ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java
@@ -4,7 +4,6 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.SensitiveStrategy; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.Data; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -20,7 +19,6 @@ * @version 3.6.0 * @see com.ruoyi.common.core.service.SensitiveService */ @Tag(name = "æµè¯æ°æ®è±ææ§å¶å¨", description = "æµè¯æ°æ®è±æç®¡ç") @RestController @RequestMapping("/demo/sensitive") public class TestSensitiveController extends BaseController { ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestTreeController.java
@@ -31,7 +31,6 @@ * @date 2021-07-26 */ @Validated @Tag(name = "æµè¯æ 表æ§å¶å¨", description = "æµè¯æ 表管ç") @RequiredArgsConstructor @RestController @RequestMapping("/demo/tree") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java
@@ -21,7 +21,6 @@ * @version 3.6.0 */ @Slf4j @Tag(name = "æçéå æ¼ç¤ºæ¡ä¾", description = "æçéå") @RequiredArgsConstructor @RestController @RequestMapping("/demo/queue/bounded") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/DelayedQueueController.java
@@ -2,7 +2,6 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.utils.redis.QueueUtils; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; @@ -24,7 +23,6 @@ * @version 3.6.0 */ @Slf4j @Tag(name = "å»¶è¿éå æ¼ç¤ºæ¡ä¾", description = "å»¶è¿éå") @RequiredArgsConstructor @RestController @RequestMapping("/demo/queue/delayed") ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java
@@ -3,7 +3,6 @@ import cn.hutool.core.util.RandomUtil; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.utils.redis.QueueUtils; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; @@ -22,7 +21,6 @@ * @version 3.6.0 */ @Slf4j @Tag(name = "ä¼å éå æ¼ç¤ºæ¡ä¾", description = "ä¼å éå") @RequiredArgsConstructor @RestController @RequestMapping("/demo/queue/priority") ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
@@ -1,11 +1,15 @@ package com.ruoyi.framework.config; import com.ruoyi.framework.config.properties.SwaggerProperties; import com.ruoyi.framework.handler.OpenApiHandler; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.SecurityRequirement; import lombok.RequiredArgsConstructor; import org.springdoc.core.SpringDocConfiguration; import org.springdoc.core.*; import org.springdoc.core.customizers.OpenApiBuilderCustomizer; import org.springdoc.core.customizers.ServerBaseUrlCustomizer; import org.springdoc.core.providers.JavadocProvider; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -14,6 +18,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; /** * Swagger ææ¡£é ç½® @@ -57,4 +62,17 @@ info.setVersion(infoProperties.getVersion()); return info; } /** * èªå®ä¹ openapi å¤çå¨ */ @Bean public OpenAPIService openApiBuilder(Optional<OpenAPI> openAPI, SecurityService securityParser, SpringDocConfigProperties springDocConfigProperties, PropertyResolverUtils propertyResolverUtils, Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomisers, Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomisers, Optional<JavadocProvider> javadocProvider) { return new OpenApiHandler(openAPI, securityParser, springDocConfigProperties, propertyResolverUtils, openApiBuilderCustomisers, serverBaseUrlCustomisers, javadocProvider); } } ruoyi-framework/src/main/java/com/ruoyi/framework/handler/OpenApiHandler.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,272 @@ package com.ruoyi.framework.handler; import cn.hutool.core.io.IoUtil; import io.swagger.v3.core.jackson.TypeNameResolver; import io.swagger.v3.core.util.AnnotationsUtils; import io.swagger.v3.oas.annotations.tags.Tags; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.Paths; import io.swagger.v3.oas.models.tags.Tag; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springdoc.core.OpenAPIService; import org.springdoc.core.PropertyResolverUtils; import org.springdoc.core.SecurityService; import org.springdoc.core.SpringDocConfigProperties; import org.springdoc.core.customizers.OpenApiBuilderCustomizer; import org.springdoc.core.customizers.ServerBaseUrlCustomizer; import org.springdoc.core.providers.JavadocProvider; import org.springframework.context.ApplicationContext; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.util.CollectionUtils; import org.springframework.web.method.HandlerMethod; import java.io.StringReader; import java.lang.reflect.Method; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; /** * èªå®ä¹ openapi å¤çå¨ * 对æºç åè½è¿è¡ä¿®æ¹ å¢å¼ºä½¿ç¨ */ @SuppressWarnings("all") public class OpenApiHandler extends OpenAPIService { /** * The constant LOGGER. */ private static final Logger LOGGER = LoggerFactory.getLogger(OpenAPIService.class); /** * The Context. */ private ApplicationContext context; /** * The Security parser. */ private final SecurityService securityParser; /** * The Mappings map. */ private final Map<String, Object> mappingsMap = new HashMap<>(); /** * The Springdoc tags. */ private final Map<HandlerMethod, io.swagger.v3.oas.models.tags.Tag> springdocTags = new HashMap<>(); /** * The Open api builder customisers. */ private final Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomisers; /** * The server base URL customisers. */ private final Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomizers; /** * The Spring doc config properties. */ private final SpringDocConfigProperties springDocConfigProperties; /** * The Open api. */ private OpenAPI openAPI; /** * The Cached open api map. */ private final Map<String, OpenAPI> cachedOpenAPI = new HashMap<>(); /** * The Is servers present. */ private boolean isServersPresent; /** * The Server base url. */ private String serverBaseUrl; /** * The Property resolver utils. */ private final PropertyResolverUtils propertyResolverUtils; /** * The javadoc provider. */ private final Optional<JavadocProvider> javadocProvider; /** * The Basic error controller. */ private static Class<?> basicErrorController; static { try { //spring-boot 2 basicErrorController = Class.forName("org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController"); } catch (ClassNotFoundException e) { //spring-boot 1 try { basicErrorController = Class.forName("org.springframework.boot.autoconfigure.web.BasicErrorController"); } catch (ClassNotFoundException classNotFoundException) { //Basic error controller class not found LOGGER.trace(classNotFoundException.getMessage()); } } } /** * Instantiates a new Open api builder. * * @param openAPI the open api * @param securityParser the security parser * @param springDocConfigProperties the spring doc config properties * @param propertyResolverUtils the property resolver utils * @param openApiBuilderCustomizers the open api builder customisers * @param serverBaseUrlCustomizers the server base url customizers * @param javadocProvider the javadoc provider */ public OpenApiHandler(Optional<OpenAPI> openAPI, SecurityService securityParser, SpringDocConfigProperties springDocConfigProperties, PropertyResolverUtils propertyResolverUtils, Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomizers, Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomizers, Optional<JavadocProvider> javadocProvider) { super(openAPI, securityParser, springDocConfigProperties, propertyResolverUtils, openApiBuilderCustomizers, serverBaseUrlCustomizers, javadocProvider); if (openAPI.isPresent()) { this.openAPI = openAPI.get(); if (this.openAPI.getComponents() == null) this.openAPI.setComponents(new Components()); if (this.openAPI.getPaths() == null) this.openAPI.setPaths(new Paths()); if (!CollectionUtils.isEmpty(this.openAPI.getServers())) this.isServersPresent = true; } this.propertyResolverUtils = propertyResolverUtils; this.securityParser = securityParser; this.springDocConfigProperties = springDocConfigProperties; this.openApiBuilderCustomisers = openApiBuilderCustomizers; this.serverBaseUrlCustomizers = serverBaseUrlCustomizers; this.javadocProvider = javadocProvider; if (springDocConfigProperties.isUseFqn()) TypeNameResolver.std.setUseFqn(true); } @Override public Operation buildTags(HandlerMethod handlerMethod, Operation operation, OpenAPI openAPI, Locale locale) { Set<Tag> tags = new HashSet<>(); Set<String> tagsStr = new HashSet<>(); buildTagsFromMethod(handlerMethod.getMethod(), tags, tagsStr, locale); buildTagsFromClass(handlerMethod.getBeanType(), tags, tagsStr, locale); if (!CollectionUtils.isEmpty(tagsStr)) tagsStr = tagsStr.stream() .map(str -> propertyResolverUtils.resolve(str, locale)) .collect(Collectors.toSet()); if (springdocTags.containsKey(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); } } if (!CollectionUtils.isEmpty(tagsStr)) { if (CollectionUtils.isEmpty(operation.getTags())) operation.setTags(new ArrayList<>(tagsStr)); else { Set<String> operationTagsSet = new HashSet<>(operation.getTags()); operationTagsSet.addAll(tagsStr); operation.getTags().clear(); operation.getTags().addAll(operationTagsSet); } } if (isAutoTagClasses(operation)) { if (javadocProvider.isPresent()) { String description = javadocProvider.get().getClassJavadoc(handlerMethod.getBeanType()); if (StringUtils.isNotBlank(description)) { io.swagger.v3.oas.models.tags.Tag tag = new io.swagger.v3.oas.models.tags.Tag(); // èªå®ä¹é¨å ä¿®æ¹ä½¿ç¨java注éå½tagå List<String> list = IoUtil.readLines(new StringReader(description), new ArrayList<>()); // tag.setName(tagAutoName); tag.setName(list.get(0)); operation.addTagsItem(list.get(0)); tag.setDescription(description); if (openAPI.getTags() == null || !openAPI.getTags().contains(tag)) { openAPI.addTagsItem(tag); } } } else { String tagAutoName = splitCamelCase(handlerMethod.getBeanType().getSimpleName()); operation.addTagsItem(tagAutoName); } } if (!CollectionUtils.isEmpty(tags)) { // Existing tags List<io.swagger.v3.oas.models.tags.Tag> openApiTags = openAPI.getTags(); if (!CollectionUtils.isEmpty(openApiTags)) tags.addAll(openApiTags); openAPI.setTags(new ArrayList<>(tags)); } // Handle SecurityRequirement at operation level io.swagger.v3.oas.annotations.security.SecurityRequirement[] securityRequirements = securityParser .getSecurityRequirements(handlerMethod); if (securityRequirements != null) { if (securityRequirements.length == 0) operation.setSecurity(Collections.emptyList()); else securityParser.buildSecurityRequirement(securityRequirements, operation); } return operation; } private void buildTagsFromMethod(Method method, Set<io.swagger.v3.oas.models.tags.Tag> tags, Set<String> tagsStr, Locale locale) { // method tags Set<Tags> tagsSet = AnnotatedElementUtils .findAllMergedAnnotations(method, Tags.class); Set<io.swagger.v3.oas.annotations.tags.Tag> methodTags = tagsSet.stream() .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())); List<io.swagger.v3.oas.annotations.tags.Tag> allTags = new ArrayList<>(methodTags); addTags(allTags, tags, locale); } } private void addTags(List<io.swagger.v3.oas.annotations.tags.Tag> sourceTags, Set<io.swagger.v3.oas.models.tags.Tag> tags, Locale locale) { Optional<Set<io.swagger.v3.oas.models.tags.Tag>> 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)); tag.description(propertyResolverUtils.resolve(tag.getDescription(), locale)); if (tags.stream().noneMatch(t -> t.getName().equals(tag.getName()))) tags.add(tag); }); }); } } ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
@@ -29,7 +29,6 @@ * @author Lion Li */ @Validated @Tag(name = "代ç çæ", description = "代ç çæç®¡ç") @RequiredArgsConstructor @RestController @RequestMapping("/tool/gen") ruoyi-generator/src/main/resources/vm/java/controller.java.vm
@@ -27,16 +27,14 @@ import com.ruoyi.common.core.page.TableDataInfo; #elseif($table.tree) #end import io.swagger.v3.oas.annotations.tags.Tag; /** * ${functionName}Controller * ${functionName} * * @author ${author} * @date ${datetime} */ @Validated @Tag(name ="${functionName}æ§å¶å¨", description = "${functionName}管ç") @RequiredArgsConstructor @RestController @RequestMapping("/${moduleName}/${businessName}")