带有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。在那里尝试建议。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...