【问题标题】:Generate webservice description with Swagger in Spring Webflux在 Spring Webflux 中使用 Swagger 生成 webservice 描述
【发布时间】:2018-06-27 07:08:26
【问题描述】:

有人在 Spring webflux 环境中使用 Swagger 库描述 web 服务的解决方案吗?

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

【问题讨论】:

    标签: spring swagger spring-webflux springfox


    【解决方案1】:

    解决直到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>  
    

    【讨论】:

    • 谢谢。难道不能只注入 ResourceHandlerRegistry 吗???我会试试的
    • 这个解决方案最初对我们有用。突然它停止工作了。
    • @RishikeshChaudhari 更新了答案,感谢指出
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 如果你包含 webflux 和 web starters,Spring 将默认接受 web 并使用 web mvc 变体。这不是一个好的建议。
      • 如果你将 spring starter web 和 webflux 结合起来,你将处于危险之中。
      【解决方案4】:

      在等待 springfox 项目的官方 webflux support 时,deblockt 在 GitHub 上做了一个解决方法:https://github.com/deblockt/springfox/tree/feature/webflux

      只需检查源代码并构建您自己的 jar,将它们包含到您的项目中。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          自 2.8.0 起,springfox 尚不支持 Spring boot 2.x 和 spring 5 功能。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-12-15
            • 2021-04-28
            • 1970-01-01
            • 1970-01-01
            • 2023-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多