我们找不到让 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>
这会产生同样的错误。
解决方案是删除所有与 swagger 相关的配置和依赖项,然后简单地自行添加:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.8.0</version>
</dependency>
1.8是Spring Boot 2.x的推荐版本