From 9079d4cb71bdef77c29b01b4d11f9f3dbda56595 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=BC=80=E5=8B=87?= Date: Mon, 20 Jan 2025 11:13:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BD=93apiRule=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=E7=AD=96=E7=95=A5=E6=97=B6=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=8C=87=E5=AE=9A=E5=A4=9A=E4=B8=AA=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E4=B9=8B=E9=97=B4=E7=9A=84=E5=85=B3=E7=B3=BB(and/or)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bean/Knife4jDocketAutoRegistry.java | 2 +- .../model/docket/Knife4jDocketInfo.java | 7 ++++- .../util/RequestHandlerSelectorUtils.java | 29 +++++++++---------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/common/bean/Knife4jDocketAutoRegistry.java b/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/common/bean/Knife4jDocketAutoRegistry.java index 6296c9e3..7e0cb448 100644 --- a/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/common/bean/Knife4jDocketAutoRegistry.java +++ b/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/common/bean/Knife4jDocketAutoRegistry.java @@ -115,7 +115,7 @@ public class Knife4jDocketAutoRegistry implements BeanFactoryAware, Initializing } else if (docketInfo.getApiRule() == ApiRuleEnums.ANNOTATION) { // 替换shortName List annotationClass = AnnotationClassEnums.resolveResources(docketInfo.getApiRuleResources()); - apiPredicate = RequestHandlerSelectorUtils.multipleAnnotations(annotationClass); + apiPredicate = RequestHandlerSelectorUtils.multipleAnnotations(annotationClass, docketInfo.isApiRuleAnnoUseAnd()); } } if (CollectionUtils.isNotEmpty(docketInfo.getPathRuleResources())) { diff --git a/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/model/docket/Knife4jDocketInfo.java b/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/model/docket/Knife4jDocketInfo.java index 736dcabd..ea8e6f15 100644 --- a/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/model/docket/Knife4jDocketInfo.java +++ b/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/model/docket/Knife4jDocketInfo.java @@ -41,7 +41,12 @@ public class Knife4jDocketInfo { * Apis strategy */ private ApiRuleEnums apiRule = ApiRuleEnums.PACKAGE; - + + /** + * Using AND operation when the strategy of apiRule is ANNOTATION, default false(or) + */ + private boolean apiRuleAnnoUseAnd = Boolean.FALSE; + /** * The resource set corresponding to the grouping policy with Api Strategy */ diff --git a/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/util/RequestHandlerSelectorUtils.java b/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/util/RequestHandlerSelectorUtils.java index 854b54b6..b6680e8b 100644 --- a/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/util/RequestHandlerSelectorUtils.java +++ b/knife4j/knife4j-openapi2-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/util/RequestHandlerSelectorUtils.java @@ -150,6 +150,16 @@ public class RequestHandlerSelectorUtils { * @return */ public static Predicate multipleAnnotations(List annotations) { + return multipleAnnotations(annotations, false); + } + + /** + * 基于注解 + * @param annotations 注解类 + * @since + * @return + */ + public static Predicate multipleAnnotations(List annotations, boolean apiRuleAnnoUseAnd) { if (annotations == null || annotations.size() == 0) { return RequestHandlerSelectors.none(); } @@ -159,21 +169,10 @@ public class RequestHandlerSelectorUtils { for (String annotationClassName : annotations) { try { Class clazz = (Class) ClassUtils.forName(annotationClassName, classLoader); - if (clazz != null) { - if (first == null) { - if (annotationClassName.equalsIgnoreCase(AnnotationClassEnums.Api.getFullPath())) { - first = RequestHandlerSelectors.withClassAnnotation(clazz); - } else { - first = RequestHandlerSelectors.withMethodAnnotation(clazz); - } - } else { - if (annotationClassName.equalsIgnoreCase(AnnotationClassEnums.Api.getFullPath())) { - first = first.or(RequestHandlerSelectors.withClassAnnotation(clazz)); - } else { - first = first.or(RequestHandlerSelectors.withMethodAnnotation(clazz)); - } - } - } + Predicate present = annotationClassName.equalsIgnoreCase(AnnotationClassEnums.Api.getFullPath()) + ? RequestHandlerSelectors.withClassAnnotation(clazz) + : RequestHandlerSelectors.withMethodAnnotation(clazz); + first = null == first ? present : apiRuleAnnoUseAnd ? first.and(present) : first.or(present); } catch (Exception e) { log.warn("Cannot handle annotation type '" + annotationClassName + "' correctly, please make sure the path is correct,message:" + e.getMessage()); } -- Gitee