Browse Source

swagger整合

yufeng0528 4 years ago
parent
commit
08c452a224

+ 12 - 0
spring5-gateway/pom.xml

@@ -58,6 +58,18 @@
58 58
 			<artifactId>jetcache-redis-lettuce</artifactId>
59 59
 			<version>2.6.0.M3</version>
60 60
 		</dependency>
61
+		
62
+		<!--swagger文档-->
63
+        <dependency>
64
+            <groupId>io.springfox</groupId>
65
+            <artifactId>springfox-swagger-ui</artifactId>
66
+            <version>2.9.2</version>
67
+        </dependency>
68
+        <dependency>
69
+            <groupId>io.springfox</groupId>
70
+            <artifactId>springfox-swagger2</artifactId>
71
+            <version>2.9.2</version>
72
+        </dependency>
61 73
 			
62 74
 		<!-- Spring test 依赖 -->
63 75
         <dependency>

+ 49 - 0
spring5-gateway/src/main/java/com/yaozhitech/spring5/config/SwaggerHandler.java

@@ -0,0 +1,49 @@
1
+package com.yaozhitech.spring5.config;
2
+
3
+import java.util.Optional;
4
+
5
+import org.springframework.beans.factory.annotation.Autowired;
6
+import org.springframework.http.HttpStatus;
7
+import org.springframework.http.ResponseEntity;
8
+import org.springframework.web.bind.annotation.GetMapping;
9
+import org.springframework.web.bind.annotation.RequestMapping;
10
+import org.springframework.web.bind.annotation.RestController;
11
+
12
+import reactor.core.publisher.Mono;
13
+import springfox.documentation.swagger.web.*;
14
+
15
+@RestController
16
+@RequestMapping("/swagger-resources")
17
+public class SwaggerHandler {
18
+
19
+    @Autowired(required = false)
20
+    private SecurityConfiguration securityConfiguration;
21
+
22
+    @Autowired(required = false)
23
+    private UiConfiguration uiConfiguration;
24
+
25
+    private final SwaggerResourcesProvider swaggerResources;
26
+
27
+    @Autowired
28
+    public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
29
+        this.swaggerResources = swaggerResources;
30
+    }
31
+
32
+
33
+    @GetMapping("/configuration/security")
34
+    public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
35
+        return Mono.just(new ResponseEntity<>(
36
+                Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
37
+    }
38
+
39
+    @GetMapping("/configuration/ui")
40
+    public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
41
+        return Mono.just(new ResponseEntity<>(
42
+                Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
43
+    }
44
+
45
+    @GetMapping("")
46
+    public Mono<ResponseEntity> swaggerResources() {
47
+        return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
48
+    }
49
+}

+ 47 - 0
spring5-gateway/src/main/java/com/yaozhitech/spring5/config/SwaggerProvider.java

@@ -0,0 +1,47 @@
1
+package com.yaozhitech.spring5.config;
2
+
3
+import java.util.ArrayList;
4
+import java.util.List;
5
+
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.context.annotation.Primary;
8
+import org.springframework.stereotype.Component;
9
+
10
+import com.yaozhitech.spring5.service.RouteService;
11
+
12
+import lombok.AllArgsConstructor;
13
+import lombok.extern.slf4j.Slf4j;
14
+import springfox.documentation.swagger.web.SwaggerResource;
15
+import springfox.documentation.swagger.web.SwaggerResourcesProvider;
16
+
17
+@Component
18
+@Primary
19
+@AllArgsConstructor
20
+@Slf4j
21
+public class SwaggerProvider implements SwaggerResourcesProvider {
22
+    private static final String API_URI = "/v2/api-docs";
23
+
24
+    @Autowired
25
+    private final RouteService routeService;
26
+
27
+    @Override
28
+    public List<SwaggerResource> get() {
29
+        List<SwaggerResource> resources = new ArrayList<>();
30
+        routeService.getRouteDefinitions().stream()
31
+                .forEach(routeDefinition -> routeDefinition.getPredicates().stream()
32
+                        .filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName()))
33
+                        .peek(predicateDefinition -> log.debug("路由配置参数:{}", predicateDefinition.getArgs()))
34
+                        .forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(),
35
+                                predicateDefinition.getArgs().get("pattern").replace("/**", API_URI)))));
36
+        log.debug("resources:{}", resources);
37
+        return resources;
38
+    }
39
+
40
+    private SwaggerResource swaggerResource(String name, String location) {
41
+        SwaggerResource swaggerResource = new SwaggerResource();
42
+        swaggerResource.setName(name);
43
+        swaggerResource.setLocation(location);
44
+        swaggerResource.setSwaggerVersion("2.0");
45
+        return swaggerResource;
46
+    }
47
+}