在spring webflux环境中使用swagger生成web服务描述

时间:2018-01-18 09:08:02

标签: spring swagger spring-webflux springfox

是否有人在spring webflux环境中使用swagger库描述webservice的解决方案!?

目标是使用swagger自动生成ws客户端存根。

6 个答案:

答案 0 :(得分:4)

变通直到Springfox 3.0.0不可用

Pom文件

       <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>3.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-spring-webflux</artifactId>
            <version>3.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0-SNAPSHOT</version>
        </dependency>

 <repositories>
        <repository>
            <id>spring-libs-milestone</id>
            <name>Spring Milestone Maven Repository</name>
            <url>http://oss.jfrog.org/artifactory/oss-snapshot-local/</url>
        </repository>
    </repositories>

配置

@Configuration
@EnableSwagger2WebFlux
public class SwaggerConfig  implements WebFluxConfigurer {
    @Bean
    public Docket api() {
       
        return new Docket(DocumentationType.SWAGGER_2)
                .genericModelSubstitutes(Mono.class, Flux.class, Publisher.class)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/swagger**")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

更新

springfox-boot-starter现在可用,并且可以与webflux一起使用。 我们只需要在pom文件中添加以下启动项目即可。 注意:在类路径中使用springfox-boot-starter时,我们不需要@EnableSwagger2WebFlux

删除对springfox-swagger2的显式依赖

<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>${io.springfox}</version>
        </dependency>  

答案 1 :(得分:2)

从2.8.0开始,springfox还不支持Spring boot 2.x和spring 5功能。

您可能希望订阅以下Springfox问题:https://github.com/springfox/springfox/issues/1773

答案 2 :(得分:2)

在等待springfox项目中的正式webflux support时,deblockt在GitHub上有一种解决方法:https://github.com/deblockt/springfox/tree/feature/webflux

只需签出sourecode并构建您自己的jar,然后将其包含到您的项目中即可。

答案 3 :(得分:0)

我在github中使用swagger,project配置了Spring boot 2 Servlet堆栈。 有总比没有好。 :) https://github.com/armdev/springboot2-swagger

答案 4 :(得分:0)

您可以将spring-boot-starter-web和spring-boot-starter-webflux一起使用。因此,如果您真的想在Spring Webflux中使用swagger,那么必须将spring-boot-starter-web依赖项添加到项目中。您现在可以完全像使用spring web一样使用swagger了。不会有任何区别。

答案 5 :(得分:0)

从2.9.2版开始,您可以将swagger与webflux一起使用。

https://github.com/deblockt/springfox/tree/feature/webflux