Springfox 2.8 或 3.0 在 Spring Boot 2.7 项目中工作

问题描述 投票:0回答:1

我们找不到让 Swagger 与我们的任何 Spring Boot 2.7 应用程序一起工作的方法。 我们已经尝试了在网络上可以找到的所有配置变体,但到目前为止还没有任何效果。以下是配置及其产生的错误的示例。 欢迎任何建议。

这是我们得到的主要错误:

Parameter 0 of constructor in springfox.documentation.spring.data.rest.BasePathAwareServicesProvider required a bean of type 'org.springframework.data.rest.core.config.RepositoryRestConfiguration' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.data.rest.core.config.RepositoryRestConfiguration' in your configuration.

其他人在这里遇到了这个问题:https://github.com/springfox/springfox/issues/3528提供的唯一解决方案是删除

spring-boot-starter-data-rest
。 这确实出现在有效的 pom 中,但我们没有将其包含在任何 pom 中,因此我们不知道它来自哪里或如何删除它。

这是依赖关系:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <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>
@Configuration
@EnableSwagger2
@Profile({"!prod && swagger"})
public class SpringFoxConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("OUR SERVICE ")
                .description("Our service endpoints")
                .version("mixed")
                .build();
    }

    @Bean
    public LinkDiscoverers discoverers() {
        List<LinkDiscoverer> plugins = new ArrayList<>();
        plugins.add(new CollectionJsonLinkDiscoverer());
        return new LinkDiscoverers(SimplePluginRegistry.create(plugins));

    }
}

application.yml

server:
  port: ${SERVER_PORT:8080}
spring:
  main:
    allow-bean-definition-overriding: true
  jpa:
      ...          
  datasource:

  profiles:
    active: ${ENV:stg}
  config:
    import:
      - classpath:application-${spring.profiles.active}.yml

我们也尝试过这个,但没有什么区别:

@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

}

还尝试使用旧的依赖项:

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

这会产生同样的错误。

spring-boot swagger swagger-ui springfox
1个回答
0
投票

解决方案是删除所有与 swagger 相关的配置和依赖项,然后简单地自行添加:

    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.8.0</version>
    </dependency>

1.8是Spring Boot 2.x的推荐版本

参见:https://springdoc.org/v1/

© www.soinside.com 2019 - 2024. All rights reserved.