Ich habe maven verwendet, um das Tutorial https://spring.io/guides/gs/uploading-files/ zu erstellen.
Alle von mir verwendeten Codes wurden kopiert.
Die Anwendung kann ausgeführt werden, aber ich erhalte die Fehlermeldung:
Whitelabel-Fehlerseite Diese Anwendung hat keine explizite Zuordnung für / error, daher sehen Sie dies als Fallback. Di Jun 30 17:24:02 CST 2015 Es ist ein unerwarteter Fehler aufgetreten (Typ = Nicht gefunden, Status = 404). Keine Nachricht verfügbar
Wie kann ich es reparieren?
spring
spring-mvc
file-upload
upload
Deng Steve
quelle
quelle
Antworten:
Stellen Sie sicher, dass sich Ihre Hauptklasse in einem Stammpaket über anderen Klassen befindet.
Wenn Sie eine Spring Boot-Anwendung ausführen (dh eine mit @SpringBootApplication kommentierte Klasse), scannt Spring nur die Klassen unter Ihrem Hauptklassenpaket.
quelle
Wenn wir eine Spring-Boot-Anwendung erstellen, versehen wir sie mit
@SpringBootApplication
Anmerkungen. Diese Annotation schließt viele andere notwendige Annotationen ab, damit die Anwendung funktioniert. Eine solche Anmerkung ist die@ComponentScan
Anmerkung. Diese Anmerkung weist Spring an, nach Spring-Komponenten zu suchen und die auszuführende Anwendung zu konfigurieren.Ihre Anwendungsklasse muss ganz oben in Ihrer Pakethierarchie stehen, damit Spring Unterpakete scannen und die anderen erforderlichen Komponenten herausfinden kann.
Das folgende Code-Snippet funktioniert, da sich das Controller-Paket unter dem
com.test.spring.boot
Paket befindetDas folgende Code-Snippet funktioniert NICHT, da sich das Controller-Paket NICHT unter dem
com.test.spring.boot
Paket befindetAus der Spring Boot-Dokumentation:
quelle
Sie können dies lösen, indem Sie
ErrorController
in Ihrer Anwendung ein hinzufügen . Sie können vom Fehlercontroller eine Ansicht zurückgeben lassen, die Sie benötigen.Der Fehlercontroller in meiner Anwendung sieht wie folgt aus:
Die obige Klasse basiert auf der Springs BasicErrorController- Klasse.
Sie können das Obige
ErrorController
wie folgt in einer@Configuration
Datei instanziieren :Sie können die Standardeinstellung überschreiben wählen,
ErrorAttributes
indem Sie ErrorAttributes implementieren . In den meisten Fällen sollten jedoch die DefaultErrorAttributes ausreichen.quelle
BasicErrorController
Klasse 404s.BasicErrorController
ist nicht mehr gut, kannst du aktualisieren?BasicErrorController
ist jetzt behoben.In meinem Fall wurde die Controller-Klasse mit Anmerkungen versehen
@Controller
. Ändern Sie dies, um@RestController
das Problem zu beheben. Grundsätzlich@RestController
ist@Controller + @ResponseBody
also entweder zu verwenden@RestController
oder@Controller
mit@ResponseBody
Annotation bei jeder Methode.Einige nützliche Hinweise hier: https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/
quelle
@RestController
damit@ResponseBody
annotieren, wird die Annotation implizit@Controller
hinzugefügt. Wenn Sie die Annotation jedoch verwenden, müssen Sie diese Annotation explizit selbst hinzufügen.in meinem Fall aufgrund der Paketposition, was bedeutet, dass das Paket des Controllers über dem Hauptklassenpaket liegen muss
Wenn mein Hauptklassenpaket
package co.companyname.spring.tutorial;
ein Controller-Paket ist, sollte espackage co.companyname.spring.tutorial.WHAT_EVER_HERE;
Nach Abschluss der Codierung drücken Sie auf Boot Dashboard
Eine letzte Sache, um sicherzustellen, dass Ihr Controller Mapping oder nicht nur Konsole ist, sollten Sie etwas Smilliar sehen
fröhliche Codierung
quelle
Dies geschieht, wenn keine explizite Fehlerseite definiert ist. Erstellen Sie zum Definieren einer Fehlerseite eine Zuordnung von / error mit einer Ansicht. Der folgende Code ist beispielsweise einem Zeichenfolgenwert zugeordnet, der im Fehlerfall zurückgegeben wird.
quelle
Versuchen Sie, die Abhängigkeit hinzuzufügen.
quelle
Ich habe diese Abhängigkeit hinzugefügt und mein Problem gelöst.
quelle
Ich entwickle die Spring Boot-Anwendung für ein paar Wochen. Und ich habe den gleichen Fehler wie unten erhalten.
Als ich diese Fehlermassage bekam, stellte ich fest, dass meine Controller- oder Rest-Controller-Klasse in meinem Projekt als Notiz definiert ist. Ich meine, dass alle Controller-Pakete nicht dasselbe Paket mit der Hauptklasse sind, die die Annotation @SpringBootApplication enthalten. Ich meine, Sie müssen den Namen Ihres Controller-Pakets zur Annotation @ComponentScan zu Ihrer Hauptklasse hinzufügen, die die Annotation @SpringBootApplication enthält. Wenn Sie Codes schreiben von unten wird Ihr Problem gelöst ... Das Wichtigste ist, dass Sie das Paket Ihres gesamten Controllers zur @ ComponentScan-Annotation hinzufügen müssen, wie ich es unten getan habe
Ich hoffe, diese Codes helfen jemandem ...
Wenn Sie einen anderen Weg finden, um diesen Fehler zu beheben, oder Vorschläge für mich haben, schreiben Sie bitte an die Kommentare ... danke ...
quelle
In der Hauptklasse hat nach der Konfiguration "@SpringBootApplication" das Hinzufügen von "@ComponentScan" ohne Argumente für mich funktioniert !!!
Hauptklasse :
RestController-Klasse:
PS: Verpassen Sie nicht, die Befehle mvn clean und mvn install auszuführen, bevor Sie die Anwendung starten
quelle
Ganz spät zur Party. Gemäß der offiziellen Spring-Dokumentation "Spring Boot installiert eine Whitelabel-Fehlerseite, die in einem Browser-Client angezeigt wird, wenn ein Serverfehler auftritt." https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page
server.error.whitelabel.enabled=false
in der Datei application.yml oder application.properties festlegen.2. Der empfohlene Weg ist, Ihre Fehlerseite so einzustellen, dass der Endbenutzer sie verstehen kann. Unter Ressourcen / templates Ordner eine erstellen error.html Datei und fügen Sie die Abhängigkeit in pom.xml Datei
Spring wählt automatisch die Seite error.html als Standardfehlervorlage aus. Hinweis: - Vergessen Sie nicht, das Maven-Projekt nach dem Hinzufügen der Abhängigkeit zu aktualisieren.
quelle
Möglicherweise wird der Fehler angezeigt, z
"Diese Anwendung hat keine explizite Zuordnung für / error, daher sehen Sie dies als Fallback."
Dies liegt daran, dass Ihre Controller & Service-Klassen nicht gescannt werden, die Sie in Ihrer main () -Klasse wie folgt angeben müssen.
Hinweis: Hier habe ich verschiedene Klassen wie Demo, Controller und Service angegeben, die gescannt werden sollen. Nur dies funktioniert ordnungsgemäß.
quelle
Sie müssen die Pakete so organisieren, dass das Paket, das public static main enthält (oder wo Sie @SpringBootApplication geschrieben haben), der Vater aller Ihrer anderen Pakete ist.
quelle
Standardmäßig durchsucht Spring Boot das aktuelle Paket nach Bean-Definition. Wenn also Ihr aktuelles Paket, in dem die Hauptklasse definiert ist und das Controller-Paket nicht identisch ist oder das Controller-Paket kein untergeordnetes Paket Ihres Haupt-App-Pakets ist, wird der Controller nicht gescannt. Um dieses Problem zu lösen, kann eine Liste von Paketen für die Bean-Definition in das Hauptpaket aufgenommen werden
oder erstellen Sie eine Pakethierarchie, in der das untergeordnete Paket vom Hauptpaket abgeleitet ist
quelle
Das Problem ist, dass Sie zu localhost: 8080 / anstelle von localhost: 8080 / upload navigieren, wie im Handbuch beschrieben. Spring Boot verfügt über eine Standardfehlerseite, die verwendet wird, wenn Sie zu einer undefinierten Route navigieren, um zu vermeiden, dass serverspezifische Details preisgegeben werden (was als Sicherheitsrisiko angesehen werden kann).
Sie haben folgende Möglichkeiten: Besuchen Sie die richtige Seite, fügen Sie Ihre eigene Zielseite hinzu oder überschreiben Sie die weiße Fehlerseite .
Um diese besondere Situation zu vereinfachen, habe ich das Handbuch so aktualisiert, dass es / anstelle von / upload verwendet.
quelle
Ich weiß, es ist nicht genau die Antwort auf die Frage, aber diese Frage ist die erste, die bei Google erscheint :)
Beim Versuch, auf die Swagger-Benutzeroberfläche zuzugreifen, tritt ein Problem auf ("Diese Anwendung hat keine explizite Zuordnung für / error").
In meinem Fall wurden Probleme durch @RestController ("/ endpoint") verursacht, der von swagger nicht richtig behandelt wird.
Dies führte also zu Fehlern:
Und das war in Ordnung
quelle
Dies kann passieren, wenn Sie die Annotation @RestController über dem Import Ihrer Controller-Klasse vergessen. import org.springframework.web.bind.annotation.RestController;
und fügen Sie die Anmerkung wie folgt hinzu
Siehe das einfache Beispiel unten
quelle
Ändern Sie @Controller in Ihrer Controller-Klasse in @RestController, und alles sollte reibungslos funktionieren.
quelle
Ich habe auch den gleichen Fehler erhalten und konnte den Fehler beheben, indem ich die folgende Abhängigkeit zu meiner pom.xml hinzufügte.
Grund ist, dass wir JSP als Ansicht verwenden. Der standardmäßig eingebettete Servlet-Container für Spring Boot Starter Web ist tomcat. Um die Unterstützung für JSPs zu aktivieren, müssten wir eine Abhängigkeit von Tomcat-Embed-Jasper hinzufügen.
In meinem Fall habe ich eine JSP als Ansicht vom Controller zurückgegeben. Hoffe, diese Antwort hilft jemandem, der mit dem gleichen Problem zu kämpfen hat.
quelle
Ich war mit diesem Problem konfrontiert und stellte später fest, dass mir die
@Configuration
Anmerkung in derMvcConfig
Klasse fehlte, die im Grunde die Zuordnung fürViewControllers
und vornimmtsetViewNames
.Hier ist der Inhalt der Datei:
Hoffe das hilft jemandem !!
quelle
Stellen Sie sicher, dass Jasper und JSTL in der Liste der Abhängigkeiten enthalten sind:
Hier ist ein funktionierendes Starterprojekt - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp
Verfasser: Biju Kunjummen
quelle
Die Hauptklasse muss sich außerhalb der Baumstruktur Ihrer App-Pakete befinden. Beispielsweise:
quelle
Alles, was ich getan habe, um diese Art von Problem zu lösen, ist die Anotation @Configuration in der MVCConfig-Klasse zu erwähnen .
Wie dieser :
quelle
Ich hatte einen ähnlichen Fehler. Ich verwende den Spring Boot und die Geschwindigkeit. Meine Lösung besteht darin, die Datei application.properties, spring.velocity.toolbox-config-location zu überprüfen und festzustellen, dass diese Eigenschaft falsch ist
quelle
In meinem Fall tritt dieses Problem auf, wenn die SpringApplication in IntelliJ ausgeführt wird, nachdem sie zuerst mit maven ausgeführt wurde.
Um das Problem zu lösen, laufe ich zuerst
mvn clean
. Dann starte ich SpringApplication in IntelliJ.quelle
Stellen Sie sicher, dass Ihr Main. Klasse sollte auf Ihren Controllern sein. Im Fall des folgenden Beispiels:
Hauptklasse mit:
EmployeeController. Klasse mit:
Wenn sich Ihre Hauptklasse im Stammordner befindet, genau wie dieser Pfad: {Projektname} / src / main / java / main, stellen Sie sicher, dass sich Ihre Controller unter Ihrer Hauptklasse befinden . Zum Beispiel {Projektname} / src / main / java / main / controller .
quelle
Fügen Sie in Ihrer Java-Datei (z. B. Viper.java) mit der Hauptklasse Folgendes hinzu: "@RestController" und @RequestMapping ("/")
quelle
Überprüfen Sie, ob Sie die Controller-Klasse mit der Annotation @RestController markiert haben .
quelle
Dies bedeutet, dass Sie versuchen, auf die Seite zuzugreifen, die nicht vorhanden ist. Angenommen, Ihre JSP-Datei befindet sich jetzt unter /webapp/home.jsp, wenn Sie @RequestMapping ("/ home") für Ihren Code verwenden und "home.jsp" zurückgeben. Wenn Sie versuchen, mit localhost: port / darauf zuzugreifen, wird dieser Fehler angezeigt. Wenn Sie jedoch localhost: port / home versuchen, tritt kein Fehler auf. Sie können diesen Fehler beheben, indem Sie Ihren @RequestMapping ("/") hier setzen Seite, auf die Sie zugreifen möchten. Sie können auch versuchen, eine Abhängigkeit von Tomcat Jaspher von der Maven-Abhängigkeit hinzuzufügen
quelle
Ich hatte das gleiche Problem mit gradle und es wurde gelöst, indem folgende Abhängigkeiten hinzugefügt wurden:
früher fehlte mir der letzte, der den gleichen Fehler verursachte.
quelle