Skip to content

Commit 6cd1eea

Browse files
committed
micro-knife4j 微服务文档方案升级
1 parent 74250f2 commit 6cd1eea

7 files changed

Lines changed: 109 additions & 15 deletions

File tree

micro-knife4j/micro-knife4j-gateway/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
<groupId>com.github.xiaoymin</groupId>
2121
<artifactId>knife4j-spring-boot-starter</artifactId>
2222
</dependency>
23+
<dependency>
24+
<groupId>org.springframework.cloud</groupId>
25+
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
26+
</dependency>
2327
</dependencies>
2428

2529
</project>

micro-knife4j/micro-knife4j-gateway/src/main/resources/application.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ spring:
55
active: dev
66
application:
77
name: micro-knife4j-gateway
8+
# mvc:
9+
# pathmatch:
10+
# matching-strategy: ANT_PATH_MATCHER
811
cloud:
912
nacos:
1013
discovery:

micro-knife4j/micro-knife4j-order/src/main/java/com/macro/cloud/config/Swagger2Config.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
package com.macro.cloud.config;
22

33
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
4+
import org.springframework.beans.BeansException;
5+
import org.springframework.beans.factory.config.BeanPostProcessor;
46
import org.springframework.context.annotation.Bean;
57
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.util.ReflectionUtils;
9+
import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
610
import springfox.documentation.builders.ApiInfoBuilder;
711
import springfox.documentation.builders.PathSelectors;
812
import springfox.documentation.builders.RequestHandlerSelectors;
913
import springfox.documentation.service.ApiInfo;
14+
import springfox.documentation.service.Contact;
1015
import springfox.documentation.spi.DocumentationType;
1116
import springfox.documentation.spring.web.plugins.Docket;
17+
import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider;
18+
import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
1219
import springfox.documentation.swagger2.annotations.EnableSwagger2;
1320

21+
import java.lang.reflect.Field;
22+
import java.util.List;
23+
import java.util.stream.Collectors;
24+
1425
/**
1526
* Swagger API相关配置
1627
*/
@@ -32,8 +43,41 @@ private ApiInfo apiInfo() {
3243
return new ApiInfoBuilder()
3344
.title("micro-knife4j-order")
3445
.description("订单服务API文档")
35-
.contact("macro")
46+
.contact(new Contact("macro",null,null))
3647
.version("1.0")
3748
.build();
3849
}
50+
51+
@Bean
52+
public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
53+
return new BeanPostProcessor() {
54+
55+
@Override
56+
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
57+
if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {
58+
customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
59+
}
60+
return bean;
61+
}
62+
63+
private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
64+
List<T> copy = mappings.stream()
65+
.filter(mapping -> mapping.getPatternParser() == null)
66+
.collect(Collectors.toList());
67+
mappings.clear();
68+
mappings.addAll(copy);
69+
}
70+
71+
@SuppressWarnings("unchecked")
72+
private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {
73+
try {
74+
Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
75+
field.setAccessible(true);
76+
return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
77+
} catch (IllegalArgumentException | IllegalAccessException e) {
78+
throw new IllegalStateException(e);
79+
}
80+
}
81+
};
82+
}
3983
}

micro-knife4j/micro-knife4j-order/src/main/resources/application.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ spring:
55
active: dev
66
application:
77
name: micro-knife4j-order
8+
mvc:
9+
pathmatch:
10+
matching-strategy: ANT_PATH_MATCHER
811
cloud:
912
nacos:
1013
discovery:

micro-knife4j/micro-knife4j-user/src/main/java/com/macro/cloud/config/Swagger2Config.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
package com.macro.cloud.config;
22

33
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
4+
import org.springframework.beans.BeansException;
5+
import org.springframework.beans.factory.config.BeanPostProcessor;
46
import org.springframework.context.annotation.Bean;
57
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.util.ReflectionUtils;
9+
import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
610
import springfox.documentation.builders.ApiInfoBuilder;
711
import springfox.documentation.builders.PathSelectors;
812
import springfox.documentation.builders.RequestHandlerSelectors;
913
import springfox.documentation.service.ApiInfo;
14+
import springfox.documentation.service.Contact;
1015
import springfox.documentation.spi.DocumentationType;
1116
import springfox.documentation.spring.web.plugins.Docket;
17+
import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider;
18+
import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
1219
import springfox.documentation.swagger2.annotations.EnableSwagger2;
1320

21+
import java.lang.reflect.Field;
22+
import java.util.List;
23+
import java.util.stream.Collectors;
24+
1425
/**
1526
* Swagger API相关配置
1627
*/
@@ -32,8 +43,41 @@ private ApiInfo apiInfo() {
3243
return new ApiInfoBuilder()
3344
.title("micro-knife4j-user")
3445
.description("用户服务API文档")
35-
.contact("macro")
46+
.contact(new Contact("macro",null,null))
3647
.version("1.0")
3748
.build();
3849
}
50+
51+
@Bean
52+
public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
53+
return new BeanPostProcessor() {
54+
55+
@Override
56+
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
57+
if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {
58+
customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
59+
}
60+
return bean;
61+
}
62+
63+
private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
64+
List<T> copy = mappings.stream()
65+
.filter(mapping -> mapping.getPatternParser() == null)
66+
.collect(Collectors.toList());
67+
mappings.clear();
68+
mappings.addAll(copy);
69+
}
70+
71+
@SuppressWarnings("unchecked")
72+
private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {
73+
try {
74+
Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
75+
field.setAccessible(true);
76+
return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
77+
} catch (IllegalArgumentException | IllegalAccessException e) {
78+
throw new IllegalStateException(e);
79+
}
80+
}
81+
};
82+
}
3983
}

micro-knife4j/micro-knife4j-user/src/main/resources/application.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ spring:
55
active: dev
66
application:
77
name: micro-knife4j-user
8+
mvc:
9+
pathmatch:
10+
matching-strategy: ANT_PATH_MATCHER
811
cloud:
912
nacos:
1013
discovery:

micro-knife4j/pom.xml

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
<maven.compiler.source>1.8</maven.compiler.source>
2020
<maven.compiler.target>1.8</maven.compiler.target>
2121
<java.version>1.8</java.version>
22-
<spring-cloud-alibaba.version>2.2.0.RELEASE</spring-cloud-alibaba.version>
23-
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
24-
<spring-boot.version>2.2.0.RELEASE</spring-boot.version>
25-
<hutool-version>5.3.5</hutool-version>
26-
<knife4j.version>2.0.4</knife4j.version>
22+
<spring-boot.version>2.7.0</spring-boot.version>
23+
<spring-cloud.version>2021.0.3</spring-cloud.version>
24+
<spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
25+
<hutool-version>5.8.0</hutool-version>
26+
<knife4j.version>3.0.3</knife4j.version>
2727
</properties>
2828

2929
<dependencyManagement>
@@ -120,16 +120,9 @@
120120
<plugin>
121121
<groupId>org.springframework.boot</groupId>
122122
<artifactId>spring-boot-maven-plugin</artifactId>
123+
<version>${spring-boot.version}</version>
123124
</plugin>
124125
</plugins>
125126
</build>
126127

127-
<repositories>
128-
<repository>
129-
<id>spring-milestones</id>
130-
<name>Spring Milestones</name>
131-
<url>https://repo.spring.io/milestone</url>
132-
</repository>
133-
</repositories>
134-
135128
</project>

0 commit comments

Comments
 (0)