使用swagger.yaml在SpringBoot中的Swagger UI

9
我们有一个使用SpringBoot(版本1.5.12)开发的REST API,其中集成了springfox-swagger2和springfox-swagger-ui(版本2.9.2)。
@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配置文件而不是自动生成? 我尝试了几种配置,但都没有成功。

1个回答

16

您需要创建一个类,该类可以提供一个SwaggerResourcesProvider@Primary bean,并指定以下配置的位置(考虑到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):

enter image description here

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


4
swagger.json 应该放在 src/main/resources/static 目录下。 - Marco Schmitz
一个小提示,我尝试使用了来自 http://editor.swagger.io/ 的 yaml 文件,但只有在使用编辑器的转换为 json 功能后才能正常工作。 - J. S.
我使用了 springfox-boot-starter 3.0.0,yaml 和 json 都一直很好用! - Chandrahasan
如果在添加资源之前放置 resources.clear(),那么它将是 UI 中唯一显示的资源。 - ouzture

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接