【发布时间】:2018-06-27 07:08:26
【问题描述】:
有人在 Spring webflux 环境中使用 Swagger 库描述 web 服务的解决方案吗?
目标是使用 Swagger 自动生成 ws 客户端存根。
【问题讨论】:
标签: spring swagger spring-webflux springfox
有人在 Spring webflux 环境中使用 Swagger 库描述 web 服务的解决方案吗?
目标是使用 Swagger 自动生成 ws 客户端存根。
【问题讨论】:
标签: spring swagger spring-webflux springfox
解决直到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>
【讨论】:
从 2.9.2 版开始,您可以将 swagger 与 webflux 一起使用。
【讨论】:
您可以将 spring-boot-starter-web 与 spring-boot-starter-webflux 一起使用。所以如果你真的想在 spring webflux 中使用 swagger,那么你必须在项目中添加 spring-boot-starter-web 依赖。您现在可以使用与 spring web 完全一样的 swagger。不会有任何区别。
【讨论】:
在等待 springfox 项目的官方 webflux support 时,deblockt 在 GitHub 上做了一个解决方法:https://github.com/deblockt/springfox/tree/feature/webflux。
只需检查源代码并构建您自己的 jar,将它们包含到您的项目中。
【讨论】:
我用 swagger 配置了 Spring boot 2 Servlet 堆栈,项目在 github。 有总比没有好。 :) https://github.com/armdev/springboot2-swagger
【讨论】:
自 2.8.0 起,springfox 尚不支持 Spring boot 2.x 和 spring 5 功能。
您可能想订阅以下 Springfox 问题:https://github.com/springfox/springfox/issues/1773
【讨论】: