Przeniosłem projekt z wiosennego rozruchu 2.1.9 do 2.2.0. Podczas uruchamiania projektu napotykam poniższe error
komunikaty.
Co mogło spowodować, nie używam też hateoas
w moim pom.xml
pliku.
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.plugin.core.PluginRegistry<org.springframework.hateoas.client.LinkDiscoverer, org.springframework.http.MediaType>' available: expected single matching bean but found 17: modelBuilderPluginRegistry,modelPropertyBuilderPluginRegistry,typeNameProviderPluginRegistry,syntheticModelProviderPluginRegistry,documentationPluginRegistry,apiListingBuilderPluginRegistry,operationBuilderPluginRegistry,parameterBuilderPluginRegistry,expandedParameterBuilderPluginRegistry,resourceGroupingStrategyRegistry,operationModelsProviderPluginRegistry,defaultsProviderPluginRegistry,pathDecoratorRegistry,apiListingScannerPluginRegistry,relProviderPluginRegistry,linkDiscovererRegistry,entityLinksPluginRegistry
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'linkDiscoverers' defined in class path resource [org/springframework/hateoas/config/HateoasConfiguration.class]: Unsatisfied dependency expressed through method 'linkDiscoverers' parameter 0; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.plugin.core.PluginRegistry<org.springframework.hateoas.client.LinkDiscoverer, org.springframework.http.MediaType>' available: expected single matching bean but found 17: modelBuilderPluginRegistry,modelPropertyBuilderPluginRegistry,typeNameProviderPluginRegistry,syntheticModelProviderPluginRegistry,documentationPluginRegistry,apiListingBuilderPluginRegistry,operationBuilderPluginRegistry,parameterBuilderPluginRegistry,expandedParameterBuilderPluginRegistry,resourceGroupingStrategyRegistry,operationModelsProviderPluginRegistry,defaultsProviderPluginRegistry,pathDecoratorRegistry,apiListingScannerPluginRegistry,relProviderPluginRegistry,linkDiscovererRegistry,entityLinksPluginRegistry
***************************
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]
Pom
<properties>
<java.version>1.8</java.version>
<swagger-springfox.version>2.9.2</swagger-springfox.version>
<sonar.jacoco.execPath>${project.basedir}/target/jacoco.exec</sonar.jacoco.execPath>
<jasypt-spring-boot-starter>2.1.1</jasypt-spring-boot-starter>
<logbook-spring-boot-starter>1.13.0</logbook-spring-boot-starter>
<assertj-swagger>0.8.1</assertj-swagger>
<jacoco-version>0.8.4</jacoco-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger-springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger-springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-spring-web</artifactId>
<version>${swagger-springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-core</artifactId>
<version>${swagger-springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-data-rest</artifactId>
<version>${swagger-springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-bean-validators</artifactId>
<version>${swagger-springfox.version}</version>
</dependency>
java
spring-boot
swagger-2.0
spring-hateoas
Viyaan Jhiingade
źródło
źródło
mvn dependency:tree
i sprawdź, czy coś innego wciągaHateoas
zależność. IRC Jeśli używasz Spring Data REST, który jest zależny od Spring Hateoas.Odpowiedzi:
Miałem ten problem
Swagger + HATEOAS
w mojejspring-boot
aplikacji.Poprawka jest podana poniżej (edytuj klasę konfiguracji Swagger):
źródło
_links
zostało zmienionelinks
i_embedded
zostało zmienionecontent
w odpowiedzi, dlatego większość moich testów mvcMock sprawdzających_links
nie powiodło się, a interfejs API różni się od tego, co jest dostarczane z pudełka z wiosennym starterem rozruchowym- hateosHalLinkDiscoverer
klasy zamiastCollectionJsonLinkDiscoverer
nie załatwić sprawy, a mimo to moje testy nie powiodły się, ponieważ linki są renderowane jakolinks
i nie_links
, a zawartość jest renderowana jakocontent
i nie oczekiwana_embedded
@EnableHypermediaSupport(type=EnableHypermediaSupport.HypermediaType.HAL)
, musisz dołączyćorg.springframework.hateoas.config.EnableHypermediaSupport
. Nie jestem pewien, czy to ważne, ale mam zależność: hateoas Spring-Boot-Starter-HateoasNajlepsze rozwiązanie
Dodaj poniższy kod w klasie SwaggerConfig
źródło
Dla mnie ten link pomógł: https://github.com/spring-projects/spring-hateoas/issues/731
W skrócie dodałem do moich zależności:
źródło
wypróbuj tę wersję 2.6.1, już rozwiązałem w ten sposób
źródło
Problem dotyczył mnie podczas korzystania
ze swaggeriem springfox
jeśli spojrzysz na zależności od wiosennych nienawiści, istnieje zależność od
spring-plugin-core
wersji2.0.0.RELEASE
ale użycie zależności swagger
spring-plugin-core
z wersją1.2.0.RELEASE
.wiosenny rozruch ma konflikt podczas tworzenia fasoli, więc musisz ujednolicić
org.springframework.plugin
wersję, aby widzial ją, Jeśli wybierzesz2.0.0.RELEASE
swagger będzie mógł skompilować bota,więc wersja
1.2.0.RELEASE
będzie działać dla obu zależności, takich jakNastępnie potrzebujesz klasy konfiguracji, aby zainicjować komponenty bean
swagger
ihateoas
tak:źródło
Tak naprawdę chciałem wsparcia dla hateoas i miałem ten sam problem. Okazało się, że tak się dzieje, jeśli masz
zamiast
źródło
Jeśli chcesz
Swagger
, ale możeszHATEOAS
iść na kompromis , po prostu usuń zależność HATEOAS i dodaj:źródło
Rozwiązany, działo się tak z powodu integracji, kiedy Swagger + HATEOAS był używany z Spring Boot 2.2.4.
a poniżej są zależności swagger
źródło
Usunąłem te zależności jako obejście i pracowałem:
daj mi znać, jeśli pracował dla ciebie.
źródło
Dla
2.1.3.RELEASE
użytkowników wersji Spring Boot następujące zależności działają dobrze dla hateoas + swagger:źródło