Generate webservice description with Swagger in Spring Webflux

11,157

Solution 1

Work around until Springfox 3.0.0 in not available

Pom File

       <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>

Config

@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/");
    }
}

Update

springfox-boot-starter is available now and it's work with webflux. We just need to add below starter project in pom file. Note: With springfox-boot-starter in class path we do not need @EnableSwagger2WebFlux.

Remove explicit dependencies on springfox-swagger2

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

Solution 2

Spring boot 2.x and spring 5 features aren’t supported yet by springfox as of 2.8.0.

You might want to subscribe to the following Springfox issue: https://github.com/springfox/springfox/issues/1773

Solution 3

While waiting for the official webflux support from the springfox project, there is a workaround done by deblockt on GitHub: https://github.com/deblockt/springfox/tree/feature/webflux.

Just checkout the sourecode and build your own jars, include them into your project.

Solution 4

As of release 2.9.2 you can use swagger with webflux.

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

Share:
11,157

Related videos on Youtube

Jimmy Pannier
Author by

Jimmy Pannier

Updated on June 04, 2022

Comments

  • Jimmy Pannier
    Jimmy Pannier almost 2 years

    Has someone a solution to describe webservice using Swagger library in a Spring webflux environment?

    The goal is to use Swagger to generate the ws client stubs automatically.

  • Bocky
    Bocky over 5 years
    If you include webflux and web starters, Spring will by default take in web and use the web mvc variant. This is not a good recommendation.
  • uday214125
    uday214125 over 4 years
    if you combine both spring starter web and webflux, you will be in danger.
  • moldovean
    moldovean about 4 years
    Thanks. Woudn't it be possible to just inject the ResourceHandlerRegistry ??? I will try
  • Rhushikesh Chaudhari
    Rhushikesh Chaudhari almost 4 years
    This solution was working for us initially. Suddenly it stopped working.
  • Niraj Sonawane
    Niraj Sonawane almost 4 years
    @RishikeshChaudhari updated the answer, Thanks for pointing out
  • RamPrakash
    RamPrakash about 2 years
    IT DOES NOT WORK AT ALL>