【问题标题】:The method apis(java.util.function.Predicate<springfox.documentation.RequestHandler>) in the type ApiSelectorBuilder is not applicableApiSelectorBuilder 类型中的方法 apis(java.util.function.Predicate<springfox.documentation.RequestHandler>) 不适用
【发布时间】:2020-11-21 10:18:35
【问题描述】:

@Bean .api 方法给了我以下错误。我像往常一样使用@Beans 添加了 Swagger 配置类。

The method apis(java.util.function.Predicate<springfox.documentation.RequestHandler>) in the type ApiSelectorBuilder is not applicable for the arguments (com.google.common.base.Predicate<springfox.documentation.RequestHandler>)

我的配置类如下:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SpringFoxConfig extends WebMvcConfigurationSupport {                                    
    @Bean
    public Docket api() { 
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage(                                            
                    "package com.sample.controller;"))
                .paths(PathSelectors.any())
                .build();
                                                
    }
}

【问题讨论】:

    标签: spring-boot maven swagger


    【解决方案1】:

    移除以下依赖:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    

    使用以下内容:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    

    【讨论】:

    • 不是,stackoverflow.com/q/62539860/7773582 的答案和实际的 Github 帐户 github.com/springfox/springfox 中提到的内容。但这当然令人困惑;一般来说,一个更集成的 Spring 解决方案——当 Spring 上下文控制可能发生的事情时——应该做得更好。因此,springfox-boot-starter 至少听起来更值得推荐,不是吗?
    【解决方案2】:
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>3.0.0</version>
    </dependency>
    

    我尝试了这些依赖项,错误确实消失了。

    【讨论】:

    • 这是正确的。对于 springfox-boot-starter 3.0.0 版本,你应该只使用 swagger-ui 3.0.0 而不是 2.9.2
    【解决方案3】:

    如果您同时添加“springfox-boot-starter”和“springfox-swagger-ui”依赖项并且它们的版本不同,则会发生此错误。

    请注意,如果您要添加“springfox-boot-starter”,则无需添加显式“springfox-swagger-ui”依赖项。

    所以只需添加以下内容并删除任何“springfox-swagger-ui”依赖项。

    <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
    </dependency>
    

    【讨论】:

      【解决方案4】:

      删除package 和; 分号以定义basePackage 为.apis()

      RequestHandlerSelectors.basePackage("com.sample.controller")
      

      看来你的基础包是com.sample 然后只使用它

      完整代码:

      @Configuration
      @EnableSwagger2
      public class SpringFoxConfig extends WebMvcConfigurationSupport {                                    
          @Bean
          public Docket api() { 
              return new Docket(DocumentationType.SWAGGER_2)
                      .select()
                      .apis(RequestHandlerSelectors.basePackage("com.sample.controller"))
                      .paths(PathSelectors.any())
                      .build();
                                                      
          }
      }
      

      使用依赖项

      <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger2</artifactId>
          <version>2.9.2</version>
      </dependency>
      <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger-ui</artifactId>
          <version>2.9.2</version>
      </dependency>
      

      【讨论】:

      • 谢谢,但 'apis' 方法仍然给出相同的错误:ApiSelectorBuilder 类型中的方法 apis(java.util.function.Predicate) 不适用于参数(com.google.common.base.Predicate)
      • @Brinda 你不需要扩展WebMvcConfigurationSupport
      • 我也试过不使用“WebMvcConfigurationSupport”。但是仍然存在该错误。我不知道为什么我会出现这个错误。
      • 解决了这些问题后,我无法重现您的问题
      • @Eklavya:哪个 Spring 版本和哪些依赖项(包括 swagger-ui)以及您使用的是哪个配置注释?您可以粘贴您的工作示例吗?谢谢!
      【解决方案5】:

      检查外部库中所有 io.springfox:springfox-* jar 的版本。必须有多个版本混淆。如果您使用的是 springfox-boot-started:3.0.0,则通过排除来排除其他版本。您不需要任何其他 springfox 依赖项。 对我来说,下面解决了这个问题-

            <groupId>com.abc.xyz</groupId>
            <artifactId>alpha-beta-api</artifactId>
            <exclusions>
              <exclusion>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
              </exclusion>
              <exclusion>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-spring-web</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
      

      【讨论】:

        【解决方案6】:

        对于那些已经拥有正确依赖的人:

         <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0</version>
        </dependency>
        

        如果您还没有@EnabledWebMvc,您可能需要添加它。

        Springfox 文档:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-26
          • 1970-01-01
          • 2013-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多