Also habe ich in den Paaren der Woche den Frühling gelernt und bin diesem Tutorial gefolgt
Erstellen eines RESTful-Webdienstes
Alles war gut, bis ich versuchte, es in Mongodb zu integrieren. Also folge ich diesem Tutorial.
Aber meine Praxis verwendet teilweise immer noch die erste. Meine Projektverzeichnisstruktur ist also so.
src/
├── main/
│ └── java/
| ├── model/
| | └── User.java
| ├── rest/
| | ├── Application.java
| | ├── IndexController.java
| | └── UsersController.java
| └── service/
| └── UserService.java
└── resources/
└── application.properties
Dies ist meine model / User.java- Datei
package main.java.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="user")
public class User {
private int age;
private String country;
@Id
private String id;
private String name;
public User() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
Dies ist meine rest / UsersController.java- Datei
package main.java.rest;
import java.util.List;
import main.java.service.UserService;
import main.java.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/users")
public class UsersController {
@Autowired
UserService userService;
@RequestMapping(method = RequestMethod.GET)
public List<User> getAllUsers() {
return userService.findAll();
}
}
Dies ist meine Datei service / UserService.java
package main.java.service;
import java.util.List;
import main.java.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserService extends MongoRepository<User, String> {
public List<User> findAll();
}
Ich konnte sie kompilieren (ich verwende gradle zum Kompilieren, weil ich dem Tutorial folge), aber als ich die JAR-Datei ausführte, wurde dieser Fehler ausgelöst.
ANWENDUNG NICHT STARTBAR
Beschreibung:
Für das Feld userService in main.java.rest.UsersController war eine Bean vom Typ 'main.java.service.UserService' erforderlich, die nicht gefunden werden konnte.
Aktion:
Definieren Sie in Ihrer Konfiguration eine Bean vom Typ 'main.java.service.UserService'.
Ich bin mir nicht sicher, was falsch ist. Ich beginne zu googeln und Beans.xml
stelle fest, dass ich eine Datei einschließen und den userService darin registrieren muss. Ich habe das getan, aber es funktioniert nicht. Ich bin wirklich neu in diesem Bereich, also habe ich wirklich keine Ahnung, was los ist.
{
fürscanBasePackages= "com.example.something","com.example.application"
Fügen Sie die
@Service
in der Datei service / UserService.java hinzu.quelle
Ich hatte auch den gleichen Fehler:
Und meine Pakete wurden auf die gleiche Weise konstruiert, wie in der akzeptierten Antwort erwähnt. Ich habe mein Problem behoben, indem ich der Hauptklasse folgende Annotation EnableMongoRepositories hinzugefügt habe:
Wenn Sie mehrere hinzufügen müssen, vergessen Sie nicht die geschweiften Klammern:
quelle
Ich bin auf dasselbe Problem gestoßen, und alles, was ich tun musste, war, die Anwendung in einem Paket zu platzieren, das eine Ebene höher als die Service-, Dao- und Domänenpakete ist.
quelle
Verbrachte viel Zeit wegen des automatischen Imports. Intellij Idea irgendwie importiert
@Service
vonimport org.jvnet.hk2.annotations.Service;
stattimport org.springframework.stereotype.Service;
!quelle
Service
aus der falschen Bibliothek importiert habe .import javax.persistence.Table;
stattimport org.springframework.data.relational.core.mapping.Table;
in meinem Modell. smh hat 5 Stunden beim Debuggen dieses Bean-Fehlers verloren.Dieser Thread ist jetzt alt, aber ich poste meine Antwort, die für andere nützlich sein kann.
Ich hatte das gleiche Problem. Es stellte sich heraus, dass es in einem anderen Modul eine andere Klasse mit demselben Namen gibt. Ich habe diese Klasse umbenannt und sie hat das Problem gelöst.
quelle
Sie müssen die
@Service
Anmerkung zur Implementierung Ihres Dienstes hinzufügen .quelle
Fügen Sie die @ -Komponente zu Ihrer Controller-Klasse hinzu. Möge dies funktionieren
quelle
Normalerweise können wir dieses Problem in zwei Aspekten lösen:
@Component
;Übrigens gibt es eine sehr gute Erklärung für den Unterschied zwischen @Component, @Repository, @Service und @Controller .
quelle
Fügen Sie @Repository in Ihre Dao-Klasse ein
Beispiel:
quelle
Die Verwendung aller @ Annotations hat mein Problem behoben. (Ja, ich bin neu in Spring.) Wenn Sie eine Serviceklasse verwenden, fügen Sie @Service hinzu, und das Gleiche gilt für @Controller und @Repository.
Dann haben diese Anmerkungen in der App.java das Problem behoben (ich verwende JPA + Hibernate).
Paketbaum:
quelle
Ich habe das gleiche Problem , das durch Hinzufügen von @EnableMongoRepositories ("in.topthree.util") behoben wurde.
Und mein Repository ist:
Jetzt geht es
quelle
Meine Mapper-Implementierungsklassen in meinem Zielordner wurden gelöscht, sodass meine Mapper-Schnittstellen keine Implementierungsklassen mehr hatten. Somit habe ich den gleichen Fehler bekommen
Field *** required a bean of type ***Mapper that could not be found.
Ich musste einfach meine Mapper-Implementierungen mit maven neu generieren und das Projekt aktualisieren ...
quelle
Ich hatte das gleiche Problem. Mein Fehler war, dass ich die @ Service-Annotation auf der Service-Schnittstelle verwendet habe. Die Annotation @Service sollte auf die ServiceImpl-Klasse angewendet werden.
quelle
Fügen Sie @Repository zu Ihrer Dao-Klasse hinzu
quelle
Ich hatte das gleiche Problem, dass ich die @ Autowired Annotation vom Controller entfernt habe. Wenn Ihr Repository eine Klasse ist, wird die Autowired Annotation benötigt, um das Repository zu verwenden. Wenn es sich jedoch um eine Schnittstelle handelt, müssen Sie die @ Autowired Annotation aus meiner Erfahrung nicht hinzufügen.
quelle
Dies kann passieren, wenn zwei Bohnen denselben Namen haben.
Module1Beans.java
:Module2Beans.java
:Eine Bean mit dem Namen
retrofitService
wird zuerst erstellt, und ihr Typ istGoogleAPI
, dann wird sie durch eine FunktionGithubAPI
abgedeckt, da beide durch eineretrofitService()
Methode erstellt wurden. Jetzt, wenn Sie@Autowired
ein erhaltenGoogleAPI
Sie eine Nachricht wieField googleAPI in com.example.GoogleService required a bean of type 'com.example.rest.GoogleAPI' that could not be found.
quelle
In meinem Fall habe ich gerade die Klasse MyprojectApplication in ein Paket (com.example.start) mit der gleichen Ebene von Modell-, Controller- und Servicepaketen eingefügt.
quelle
Ich bin zu diesem Beitrag gekommen, um Hilfe bei der Verwendung von Spring Webflux mit Mongo Repository zu suchen.
Mein Fehler war ähnlich wie beim Besitzer
Da ich zuvor mit Spring MVC gearbeitet habe, war ich von diesem Fehler überrascht.
Da das Finden von Hilfe nicht so offensichtlich war, beantworte ich diese Frage, da sie irgendwie verwandt ist und diese Frage in den Suchergebnissen hoch ist.
Als erstes müssen Sie sich daran erinnern, was in der als akzeptiert gekennzeichneten Antwort erwähnt wurde - Pakethierarchie.
Zweitens ist es wichtig, dass Sie bei Verwendung von Webflux ein anderes Paket verwenden müssen, während Sie bei Verwendung von Spring MVC, z. B. für MongoDB, hinzufügen müssen
mit -reaktiv am Ende.
quelle
Ich weiß, dass es alt ist, aber ich möchte meine 5 Cent hinzufügen.
Ich habe
.service
und.service.impl
in einer Ordnerstruktur verwendet, um den Dienst mit seiner Implementierung zu trennen. Vergessen Sie, das ServiceImplementation-Teil zu implementieren.quelle
Sie müssen Spring-Boot-Starter-Data-JPA als Abhängigkeit importieren, wenn Sie Spring Boot verwenden
quelle
Um eine Bean zu erstellen und zu injizieren, sollte die Klasse entsprechend dem Kontext in Ihrem Kontext mit @ Componet, @ service, @ Repository usw. markiert sein
quelle
Für mich diese Nachricht:
bedeutete "in meinem Wicket-Unit-Test oben müssen Sie diese Bohne manuell wie" hinzufügen "
quelle
Dies löste mein Problem.
quelle