swagger 在springdoc中,是否可以在同一组中同时显示OpenAPI生成的UI和自定义的静态yml文件?

egmofgnx  于 2022-11-06  发布在  Spring
关注(0)|答案(1)|浏览(146)

我正在使用自己的API构建第三方软件的增强功能。我有第三方的静态.yml文件用于swagger,但对于我自己的端点,我使用springdoc注解和OpenAPI bean声明来生成文档。我可以在同一个swagger文档中显示这两个文件吗?
动态生成单据:

@Configuration
public class SwaggerConfiguration {
   @Bean
   public GroupedOpenApi myOpenApi() {
      String group = "My Group API";
      String paths[] = { "/**" };
      GroupedOpenApi api = GroupedOpenApi.builder()
           .group(group)
           .pathsToMatch(paths)
           .packagesToScan("org.mypackage")
           .addOpenApiCustomiser(openApi -> {
                   openApi.setInfo(
                        new Info()
                            .title(group)
                            .description("[Base URL: /myapi ]")
                   );
           }).build();
           return api;
   }
}

应用程序.yml中的静态.yml设置:

springdoc:
   swagger-ui:
     urls:
       - name: My Group 1
         display-name: My Group 1
         url: group1.yml
       - name: My Group 2
         display-name: My Group 2
         url: group2.yml

所以在默认情况下,springdoc会以swagger的形式显示我动态生成的API,但是一旦我添加了静态设置,静态文件驱动的swagger组就会显示出来,而动态的swagger组就不会显示出来了。有可能同时显示这两个组吗?

ruarlubt

ruarlubt1#

我想到了一个解决办法,但可能是黑客。请让我知道是否有合适的方法来做到这一点...
即使我添加了静态设置,动态生成的openapi java bean仍然在执行,所以当加载swagger页面时,尽管springdoc没有显示动态URL,但是动态URL仍然存在。
因此,要使用springdoc显示静态和动态的swagger内容:
1.只使用动态生成的swagger运行您的spring-boot应用程序(在application.yml中没有静态设置或将其注解掉)
1.在它生成的swagger页面中,应该有一个指向openapi生成的文件的url链接(在本例中为http://localhost:8080/v3/api-docs/My%20Group%20API),点击它,它将打开一个新的标签页。
1.将静态设置添加到应用程序.yml文件中,并添加另一个包含该url的集合条目:

springdoc:
   swagger-ui:
     urls:
       - name: My Group 1
         display-name: My Group 1
         url: group1.yml
       - name: My Group 2
         display-name: My Group 2
         url: group2.yml
       - name: My Group API
         display-name: My Group API
         url: /v3/api-docs/My%20Group%20API

启动spring-boot应用程序,下拉列表中将显示静态文件swagger组和动态组

相关问题