Generate webservice description with Swagger in Spring Webflux
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.
Related videos on Youtube
Jimmy Pannier
Updated on June 04, 2022Comments
-
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 over 5 yearsIf 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 over 4 yearsif you combine both spring starter web and webflux, you will be in danger.
-
moldovean about 4 yearsThanks. Woudn't it be possible to just inject the ResourceHandlerRegistry ??? I will try
-
Rhushikesh Chaudhari almost 4 yearsThis solution was working for us initially. Suddenly it stopped working.
-
Niraj Sonawane almost 4 years@RishikeshChaudhari updated the answer, Thanks for pointing out
-
RamPrakash about 2 yearsIT DOES NOT WORK AT ALL>