Skip to content

Commit b44a321

Browse files
committed
feat: 升级 knife4j 到 3.0.3,统一集成到 gateway swagger
1 parent 5448b09 commit b44a321

5 files changed

Lines changed: 137 additions & 3 deletions

File tree

common/plugin/swagger/src/main/java/com/github/cadecode/uniboot/common/plugin/swagger/config/SwaggerAutoConfig.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.springframework.context.annotation.Import;
1111
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
1212
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
13-
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
1413

1514
/**
1615
* Swagger WebMvc 配置
@@ -19,7 +18,6 @@
1918
* @since 2023/6/8
2019
*/
2120
@RequiredArgsConstructor
22-
@EnableSwagger2WebMvc
2321
@EnableKnife4j
2422
@Configuration
2523
@Import(SwaggerRegisterKit.class)

dependencies/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<guava.vsersion>31.0.1-jre</guava.vsersion>
3131
<vavr.vsersion>1.0.0-alpha-4</vavr.vsersion>
3232
<mica-auto.version>2.3.2</mica-auto.version>
33-
<knife4j.version>2.0.9</knife4j.version>
33+
<knife4j.version>3.0.3</knife4j.version>
3434
<mybatis.version>2.2.0</mybatis.version>
3535
<pagehelper.version>1.4.0</pagehelper.version>
3636
<mybatis-plus.version>3.5.1</mybatis-plus.version>

gateway/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@
6868
<groupId>com.github.ulisesbocchio</groupId>
6969
<artifactId>jasypt-spring-boot-starter</artifactId>
7070
</dependency>
71+
<!--swagger-->
72+
<dependency>
73+
<groupId>com.github.xiaoymin</groupId>
74+
<artifactId>knife4j-spring-boot-starter</artifactId>
75+
</dependency>
7176

7277
<dependency>
7378
<groupId>com.github.cadecode</groupId>
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.github.cadecode.uniboot.gateway.config;
2+
3+
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.cloud.gateway.config.GatewayProperties;
6+
import org.springframework.cloud.gateway.route.RouteLocator;
7+
import org.springframework.cloud.gateway.support.NameUtils;
8+
import org.springframework.context.annotation.Bean;
9+
import org.springframework.context.annotation.Configuration;
10+
import org.springframework.context.annotation.Primary;
11+
import springfox.documentation.swagger.web.SwaggerResource;
12+
import springfox.documentation.swagger.web.SwaggerResourcesProvider;
13+
14+
import java.util.HashSet;
15+
import java.util.List;
16+
import java.util.Map;
17+
import java.util.Set;
18+
import java.util.stream.Collectors;
19+
20+
/**
21+
* Gateway swagger 聚合配置
22+
*
23+
* @author Cade Li
24+
* @since 2023/7/29
25+
*/
26+
@RequiredArgsConstructor
27+
@EnableKnife4j
28+
@Configuration
29+
public class GatewaySwaggerConfig {
30+
31+
/**
32+
* 网关路由
33+
*/
34+
private final RouteLocator routeLocator;
35+
36+
private final GatewayProperties gatewayProperties;
37+
38+
@Primary
39+
@Bean
40+
public SwaggerResourcesProvider resourcesProvider() {
41+
return new SwaggerResourcesProvider() {
42+
/**
43+
* 聚合服务接口
44+
*/
45+
@Override
46+
public List<SwaggerResource> get() {
47+
Set<String> routeSet = new HashSet<>();
48+
// 获取网关中配置的 route
49+
routeLocator.getRoutes().subscribe(o -> routeSet.add(o.getId()));
50+
return gatewayProperties.getRoutes().stream()
51+
.filter(o -> routeSet.contains(o.getId()))
52+
.flatMap(o -> o.getPredicates().stream()
53+
.filter(p -> "Path".equalsIgnoreCase(p.getName()))
54+
.map(p -> geneSwaggerResource(o.getId(), p.getArgs()))
55+
.collect(Collectors.toList())
56+
.stream())
57+
.collect(Collectors.toList());
58+
}
59+
60+
};
61+
}
62+
63+
private SwaggerResource geneSwaggerResource(String name, Map<String, String> args) {
64+
// 获取 swagger2 location
65+
String location = args.get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", "/v2/api-docs");
66+
SwaggerResource swaggerResource = new SwaggerResource();
67+
swaggerResource.setName(name);
68+
swaggerResource.setLocation(location);
69+
swaggerResource.setSwaggerVersion("2.0");
70+
return swaggerResource;
71+
}
72+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.github.cadecode.uniboot.gateway.controller;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.http.HttpStatus;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.web.bind.annotation.GetMapping;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RestController;
10+
import reactor.core.publisher.Mono;
11+
import springfox.documentation.swagger.web.*;
12+
13+
import java.util.Optional;
14+
15+
/**
16+
* Swagger 网关统一接口
17+
*
18+
* @author Cade Li
19+
* @since 2023/7/29
20+
*/
21+
@RequiredArgsConstructor
22+
@RestController
23+
@RequestMapping("/swagger-resources")
24+
public class SwaggerController {
25+
26+
private final SwaggerResourcesProvider resourcesProvider;
27+
28+
private SecurityConfiguration securityConfiguration;
29+
30+
private UiConfiguration uiConfiguration;
31+
32+
@Autowired(required = false)
33+
public void setSecurityConfiguration(SecurityConfiguration securityConfiguration) {
34+
this.securityConfiguration = securityConfiguration;
35+
}
36+
37+
@Autowired(required = false)
38+
public void setUiConfiguration(UiConfiguration uiConfiguration) {
39+
this.uiConfiguration = uiConfiguration;
40+
}
41+
42+
@GetMapping("/configuration/security")
43+
public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
44+
return Mono.just(new ResponseEntity<>(Optional.ofNullable(securityConfiguration)
45+
.orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
46+
}
47+
48+
@GetMapping("/configuration/ui")
49+
public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
50+
return Mono.just(new ResponseEntity<>(Optional.ofNullable(uiConfiguration)
51+
.orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
52+
}
53+
54+
@SuppressWarnings("rawtypes")
55+
@GetMapping("")
56+
public Mono<ResponseEntity> swaggerResources() {
57+
return Mono.just((new ResponseEntity<>(resourcesProvider.get(), HttpStatus.OK)));
58+
}
59+
}

0 commit comments

Comments
 (0)