首页 > 解决方案 > 在 SpringBoot 中使用 swagger.yaml 的 Swagger UI

问题描述

我们有一个带有 springfox-swagger2 和 springfox-swagger-ui(2.9.2 版)的 SpringBoot(1.5.12 版)REST Api

@EnableSwagger2
public class Application extends SpringBootServletInitializer {
   @Bean
   public Docket swagger() {
       return new Docket(SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build();
    }

我可以在http://localhost:8080/swagger-ui.html看到 Swagger UI

如何配置 swagger-ui 来读取我的 swagger.yaml/json 配置文件而不是自动生成它?我尝试了几种配置都没有成功。

标签: javaspring-bootswagger

解决方案


您需要创建一个可以提供SwaggerResourcesProvider @Primarybean 的类,它指定配置的位置,如下所示(考虑到swagger.json文件存在于 中src/main/resources

@Configuration
public class SwaggerSpecConfig {

    @Primary
    @Bean
    public SwaggerResourcesProvider swaggerResourcesProvider(InMemorySwaggerResourcesProvider defaultResourcesProvider) {
        return () -> {
            SwaggerResource wsResource = new SwaggerResource();
            wsResource.setName("new spec");
            wsResource.setSwaggerVersion("2.0");
            wsResource.setLocation("/swagger.json");

            List<SwaggerResource> resources = new ArrayList<>(defaultResourcesProvider.get());
            resources.add(wsResource);
            return resources;
        };
    }
}

然后在 Swagger UI 上,您将能够从您的 json(命名为new spec此处)中选择规范,如下所示:

在此处输入图像描述

这是 Springfox 文档的链接: http ://springfox.github.io/springfox/docs/current/#aggregating-multiple-swagger-specifications-in-the-same-swagger-ui


推荐阅读