如何解决带有Swagger + Hateoas的Spring Boot 2.3.4
尝试使用Hateoas和Swagger 2.9.0时,应用程序因以下异常而无法启动:
import sqlite3
def ConnectData():
con = sqlite3.connect("libbooks.db")
cur = con.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS libbooks (id INTEGER PRIMARY KEY,MTy text,Ref text,Title text,Fna text,Sna text,Adr1 text,Adr2 text,Pcd text,MNo text,BkID text,BkT text,Atr text,DBo text,Ddu text,sPr text,Lrf text,Dod text,DonL text''')
con.commit()
con.close()
def addDataRec(MTy,Ref,Title,Fna,Sna,Adr1,Adr2,Pcd,MNo,BkID,BkT,Atr,DBo,Ddu,sPr,Lrf,Dod,DonL):
con = sqlite3.connect("libbooks.db")
cur.execute("INSERT INTO libbooks VALUES (NULL,?,?)",(MTy,DonL))
con.commit()
con.close()
ConnectData()
APPLICATION Failed TO START
***************************
Description:
Parameter 0 of method linkdiscoverers in org.springframework.hateoas.config.HateoasConfiguration required a single bean,but 17 were found:
- modelBuilderPluginRegistry: defined in null
- modelPropertyBuilderPluginRegistry: defined in null
- typeNameProviderPluginRegistry: defined in null
- syntheticModelProviderPluginRegistry: defined in null
- documentationPluginRegistry: defined in null
- apiListingBuilderPluginRegistry: defined in null
- operationBuilderPluginRegistry: defined in null
- parameterBuilderPluginRegistry: defined in null
- expandedParameterBuilderPluginRegistry: defined in null
- resourceGroupingStrategyRegistry: defined in null
- operationModelsProviderPluginRegistry: defined in null
- defaultsProviderPluginRegistry: defined in null
- pathDecoratorRegistry: defined in null
- apiListingScannerPluginRegistry: defined in null
- relProviderPluginRegistry: defined by method 'relProviderPluginRegistry' in class path resource [org/springframework/hateoas/config/HateoasConfiguration.class]
- linkdiscovererRegistry: defined in null
- entityLinksPluginRegistry: defined by method 'entityLinksPluginRegistry' in class path resource [org/springframework/hateoas/config/WebMvcEntityLinksConfiguration.class]
Action:
Consider marking one of the beans as @Primary,updating the consumer to accept multiple beans,or using @Qualifier to identify the bean that should be consumed
但这对我不起作用。 有人知道如何处理这个问题吗? 这是我的build.gradle文件:
@Configuration
@EnableSwagger2
@EnableHypermediaSupport(type=EnableHypermediaSupport.HypermediaType.HAL)
public class AppConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any()).build();
}
@Primary
@Bean
public Linkdiscoverers discoverers() {
List<Linkdiscoverer> plugins = new ArrayList<>();
plugins.add(new CollectionjsonLinkdiscoverer());
return new Linkdiscoverers(SimplePluginRegistry.create(plugins));
}
}
当我尝试将Spring-plugin-core更改为2.0.0版本时,我也收到此错误:
plugins {
id 'org.springframework.boot' version '2.3.4.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
}
group = 'com'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-hateoas'
runtimeOnly 'com.h2database:h2'
compile group: 'io.springfox',name: 'springfox-swagger2',version: '2.9.2'
compile group: 'io.springfox',name: 'springfox-swagger-ui',version: '2.9.2'
compile group: 'org.springframework.plugin',name: 'spring-plugin-core',version: '1.2.0.RELEASE'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage',module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
解决方法
仅在Google上搜索错误消息“ org.springframework.hateoas.config.HateoasConfiguration中的方法linkDiscoverers的参数0需要单个bean”,我发现了一个github issue,它说spring hateoas与springfox并不完全兼容
尝试按照该github问题中的建议将spring-plugin-core
升级到2.0.0.RELEASE。
这是另一个相关的github issue。在那里尝试建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。