微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有Swagger + Hateoas的Spring Boot 2.3.4

如何解决带有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 举报,一经查实,本站将立刻删除。