Reputation: 31
Pom.xml:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.7</version>
</dependency>
SwaggerConfig.java:
@Configuration
@RequiredArgsConstructor
public class SwaggerConfig {
private final RouteDefinitionLocator locator;
@Bean
public List<GroupedOpenApi> apis() {
List<GroupedOpenApi> groups = new ArrayList<>();
List<RouteDefinition> definitions = locator.getRouteDefinitions().collectList().block();
definitions.stream().filter(routeDefinition -> routeDefinition.getId().matches(".*-service")).forEach(routeDefinition -> {
String name = routeDefinition.getId().replaceAll("-service", "");
GroupedOpenApi api = GroupedOpenApi.builder().pathsToMatch("/" + name + "/**").group(name).build();
groups.add(api);
});
return groups;
}
}
application.yml:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
routes:
- id: swagger
uri: http://localhost:${server.port}
predicates:
- Path=/v3/api-docs/**
filters:
- RewritePath=/v3/api-docs/(?<path>.*), /$\{path}/v3/api-docs
- id: test-service
uri: lb://test-service
predicates:
- Path=/testservice/**
filters:
- RewritePath=/testservice/(?<path>.*), /$\{path}
Api gateway sees test-service with the help of discovery-server. When I enter swagger-ui of my gateway server, in the "Select a definition" tab I only see "default" definition but no test-service definition that I really want. I've used those tutorials:
Upvotes: 3
Views: 3830
Reputation: 23
You can add this config in the yaml file:
springdoc:
api-docs:
enabled: true
swagger-ui:
config-url: v3/api-docs/swagger-config
url: /v3/api-docs
urls:
- name: test
url: /v3/api-docs/test
Upvotes: -2
Reputation: 633
I solved with this application.yml
:
spring:
cloud:
gateway:
routes:
- id: openapi
uri: http://localhost:${server.port}
predicates:
- Path=/v3/api-docs/**
filters:
- RewritePath=/v3/api-docs/(?<path>.*), /$\{path}/v3/api-docs
- id: characters-service
uri: lb://characters-service
predicates:
- Path=/characters-service/**
filters:
- RewritePath=/characters-service/(?<path>.*), /$\{path}
springdoc:
enable-native-support: true
api-docs:
groups:
enabled: true
enabled: true
group-configs:
- group: api-gateway
packages-to-scan:
- dev.kambei.apigateway
display-name: API Gateway
- group: characters-service
paths-to-match:
- /characters-service/**
display-name: Characters Service
swagger-ui:
config-url: /v3/api-docs/swagger-config
url: /v3/api-docs
urls:
- url: /v3/api-docs
name: API Gateway
- url: /characters-service/v3/api-docs
name: Characters Service
Upvotes: 2