API Gateway不会汇总Microservices Swagger Docs Spring Boot

发布于 2025-01-21 09:21:35 字数 2573 浏览 1 评论 0 原文

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

  1. https://dgempiuc.medium.com/api-gateway-swagger-swagger-composition-composition-composition-e9416398ca47

屏幕快照:

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:

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

Screenshot:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

染墨丶若流云 2025-01-28 09:21:35

我用此 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

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
oО清风挽发oО 2025-01-28 09:21:35

您可以在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

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文