API Gateway 不聚合微服务 swagger 文档 Spring boot

问题描述 投票:0回答:2

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 网关在发现服务器的帮助下看到测试服务。当我进入网关服务器的 swagger-ui 时, 在“选择定义”选项卡中,我只看到“默认”定义,但没有看到我真正想要的测试服务定义。我使用过这些教程:

  1. https://piotrminkowski.com/2020/02/20/microservices-api-documentation-with-springdoc-openapi/
  2. https://dgempiuc.medium.com/api-gateway-swagger-composition-e9416398ca47

Screenshot:

java spring-boot swagger api-gateway
2个回答
1
投票

我用这个解决了

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

-2
投票

您可以在yaml文件中添加此配置:

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
© www.soinside.com 2019 - 2024. All rights reserved.