Diese Anwendung hat keine explizite Zuordnung für / error

107

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?

Deng Steve
quelle
hat deinen Kommentar zum Beitrag hinzugefügt - du kannst ihn selbst bearbeiten. Das ist besser als deinen eigenen Beitrag zu kommentieren
Alexander

Antworten:

137

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.

com
   +- APP
         +- Application.java  <--- your main class should be here, above your controller classes
         |
         +- model
         |   +- user.java
         +- controller
             +- UserController.java
vignesh Subash
quelle
4
Über oder auf dem gleichen Niveau?
Martin Erlic
21
Ich habe fast 2 Stunden meines Lebens damit verbracht, das herauszufinden!
Rakesh
6
Versuchte das auch. Immer noch Fehler. Zumindest die Hauptseite, dh localhost: 8080, sollte mir die Tomcat-Homepage zeigen, nicht wahr? Aber auch das zeigt sich nicht
zulkarnain shah
Danke für den Tipp. Ich war früher ein Eclipse-Benutzer und dort wurde diese Konfiguration nicht benötigt, aber jetzt verwende ich IntelliJ und es war sehr hoffnungsvoll.
Armer B.
@zulkarnainshah Die übliche Tomcat-Homepage wird durch ein WAR generiert, das hier nicht enthalten ist.
Thorbjørn Ravn Andersen
61

Wenn wir eine Spring-Boot-Anwendung erstellen, versehen wir sie mit @SpringBootApplicationAnmerkungen. Diese Annotation schließt viele andere notwendige Annotationen ab, damit die Anwendung funktioniert. Eine solche Anmerkung ist die @ComponentScanAnmerkung. 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.

package com.test.spring.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

Das folgende Code-Snippet funktioniert, da sich das Controller-Paket unter dem com.test.spring.bootPaket befindet

package com.test.spring.boot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

    @RequestMapping("/")
    public String home(){
        return "Hello World!";
    }
}

Das folgende Code-Snippet funktioniert NICHT, da sich das Controller-Paket NICHT unter dem com.test.spring.bootPaket befindet

package com.test.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

     @RequestMapping("/")
     public String home(){
         return "Hello World!";
     }
 }

Aus der Spring Boot-Dokumentation:

Viele Frühlings - Boot - Entwickler haben immer ihre Hauptklasse kommentierten mit @Configuration, @EnableAutoConfigurationund @ComponentScan. Da diese Anmerkungen so häufig zusammen verwendet werden (insbesondere wenn Sie die oben genannten Best Practices befolgen), bietet Spring Boot eine bequeme @SpringBootApplicationAlternative.

Die @SpringBootApplicationAnnotation entspricht der Verwendung @Configuration, @EnableAutoConfigurationund @ComponentScanmit ihren Standardattributen

musibs
quelle
3
Sehr schöne Erklärung. Vielen Dank
Lova Chittumuri
39

Sie können dies lösen, indem Sie ErrorControllerin 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:

import org.springframework.boot.autoconfigure.web.ErrorAttributes;
import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * Basic Controller which is called for unhandled errors
 */
@Controller
public class AppErrorController implements ErrorController{

    /**
     * Error Attributes in the Application
     */
    private ErrorAttributes errorAttributes;

    private final static String ERROR_PATH = "/error";

    /**
     * Controller for the Error Controller
     * @param errorAttributes
     */
    public AppErrorController(ErrorAttributes errorAttributes) {
        this.errorAttributes = errorAttributes;
    }

    /**
     * Supports the HTML Error View
     * @param request
     * @return
     */
    @RequestMapping(value = ERROR_PATH, produces = "text/html")
    public ModelAndView errorHtml(HttpServletRequest request) {
        return new ModelAndView("/errors/error", getErrorAttributes(request, false));
    }

    /**
     * Supports other formats like JSON, XML
     * @param request
     * @return
     */
    @RequestMapping(value = ERROR_PATH)
    @ResponseBody
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request));
        HttpStatus status = getStatus(request);
        return new ResponseEntity<Map<String, Object>>(body, status);
    }

    /**
     * Returns the path of the error page.
     *
     * @return the error path
     */
    @Override
    public String getErrorPath() {
        return ERROR_PATH;
    }


    private boolean getTraceParameter(HttpServletRequest request) {
        String parameter = request.getParameter("trace");
        if (parameter == null) {
            return false;
        }
        return !"false".equals(parameter.toLowerCase());
    }

    private Map<String, Object> getErrorAttributes(HttpServletRequest request,
                                                   boolean includeStackTrace) {
        RequestAttributes requestAttributes = new ServletRequestAttributes(request);
        return this.errorAttributes.getErrorAttributes(requestAttributes,
                includeStackTrace);
    }

    private HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer) request
                .getAttribute("javax.servlet.error.status_code");
        if (statusCode != null) {
            try {
                return HttpStatus.valueOf(statusCode);
            }
            catch (Exception ex) {
            }
        }
        return HttpStatus.INTERNAL_SERVER_ERROR;
    }
}

Die obige Klasse basiert auf der Springs BasicErrorController- Klasse.

Sie können das Obige ErrorControllerwie folgt in einer @ConfigurationDatei instanziieren :

 @Autowired
 private ErrorAttributes errorAttributes;

 @Bean
 public AppErrorController appErrorController(){return new AppErrorController(errorAttributes);}

Sie können die Standardeinstellung überschreiben wählen, ErrorAttributesindem Sie ErrorAttributes implementieren . In den meisten Fällen sollten jedoch die DefaultErrorAttributes ausreichen.

Owaismus
quelle
1
Ihr Link zur BasicErrorControllerKlasse 404s.
Stephane
@owaism: Der Link für BasicErrorControllerist nicht mehr gut, kannst du aktualisieren?
HDJEMAI
1
Der Link zu BasicErrorControllerist jetzt behoben.
Axiopistie
14

In meinem Fall wurde die Controller-Klasse mit Anmerkungen versehen @Controller. Ändern Sie dies, um @RestControllerdas Problem zu beheben. Grundsätzlich @RestControllerist @Controller + @ResponseBody also entweder zu verwenden @RestControlleroder @Controllermit @ResponseBodyAnnotation bei jeder Methode.

Einige nützliche Hinweise hier: https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/

mein Schlüssel
quelle
Es funktioniert, aber gemäß den Beispielen sollte die Grundkonfiguration im gesamten Internet mit @Controller funktionieren. Ist jemandem bekannt, warum nur RestController funktioniert?
Supernova
Wenn Sie Ihre Klasse @RestControllerdamit @ResponseBodyannotieren, wird die Annotation implizit @Controllerhinzugefügt. Wenn Sie die Annotation jedoch verwenden, müssen Sie diese Annotation explizit selbst hinzufügen.
Robin Keskisarkka
10

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;

package co.companyname.spring.tutorial; // package for main class
@SpringBootApplication
public class FirstProjectApplication {

    public static void main(String[] args) {
        SpringApplication.run(FirstProjectApplication.class, args);
    }
}


package co.companyname.spring.tutorial.controllers; // package for controllers 

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController 
public class HelloController { 

@RequestMapping("/hello")  
public String hello() {   
 return "Hello, world"; 
 }}

Nach Abschluss der Codierung drücken Sie auf Boot Dashboard

Geben Sie hier die Bildbeschreibung ein

Eine letzte Sache, um sicherzustellen, dass Ihr Controller Mapping oder nicht nur Konsole ist, sollten Sie etwas Smilliar sehen

Mapped "{[/hello]}" onto public java.lang.String co.companyname.spring.tutorial.controllers.HelloController.hello()

fröhliche Codierung

Mina Fawzy
quelle
9

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.

package com.rumango.controller;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class IndexController implements ErrorController{
    private final static String PATH = "/error";
    @Override
    @RequestMapping(PATH)
    @ResponseBody
    public String getErrorPath() {
        // TODO Auto-generated method stub
        return "No Mapping Found";
    }

}
Prabhat Kumar
quelle
Können Sie Ihrem Code eine Erklärung hinzufügen? Warum löst es die Frage, welche Teile entscheidend sind?
Nico Haase
In dieser Antwort ist eine bestimmte Sache in Bezug auf Spring Boot zu beachten, die mir zunächst ein wenig Kopfschmerzen bereitete. Es ist wichtig, die ErrorController-Schnittstelle von springframework zu implementieren. Wenn Sie einen Controller-Endpunkt erstellen, der "/ error" zugeordnet ist, ohne dies zu tun, wird eine Fehlermeldung angezeigt, dass die Methode bereits zugeordnet ist.
mmaynar1
8

Versuchen Sie, die Abhängigkeit hinzuzufügen.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Sree
quelle
2
Was macht das eigentlich?
Stealth Rabbi
Ich habe diese Abhängigkeit hinzugefügt und es hat funktioniert. Genau wie bei @StealthRabbi ... Ich frage mich auch, was das eigentlich bewirkt.
Twindham
@StealthRabbi Dies fügt eine Abhängigkeit zu einem Vorlagen-Framework namens Thymeleaf hinzu, das eine Alternative und der bevorzugte Ansatz für JSP darstellt. Diese Antwort ist keine echte Antwort imo, das Herumwerfen von Abhängigkeiten hilft niemandem, der sich wirklich für das Kernthema interessiert
Christian
5

Ich habe diese Abhängigkeit hinzugefügt und mein Problem gelöst.

<dependency>
    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Ekene Oguikpu
quelle
Hier ist meine Theorie: Wenn wir "@Controller" verwenden, würde Spring irgendwie erfordern, dass wir eine bestimmte Template-Engine haben. Und in diesem Fall Thymeleaf. Daher ist Spring-Boot-Starter-Thymeleaf erforderlich. Wenn wir dagegen "@RestController" verwenden, würde Spring Boot keine Template-Engine benötigen. Und deshalb funktioniert es ohne Thymeleaf.
Yosi Pramajaya
4

Ich entwickle die Spring Boot-Anwendung für ein paar Wochen. Und ich habe den gleichen Fehler wie unten erhalten.

Whitelabel-Fehlerseite Diese Anwendung hat keine explizite Zuordnung für / error, daher sehen Sie dies als Fallback. Do 18. Januar 14:12:11 AST 2018 Es ist ein unerwarteter Fehler aufgetreten (Typ = Nicht gefunden, Status = 404). Keine Nachricht verfügbar

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

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({ "com.controller.package1, com.controller.package2, com.controller.package3, com.controller.packageN", "controller", "service" } // If our Controller class or Service class is not in the same packages we have //to add packages's name like this...directory(package) with main class
public class MainApp {
    public static void main(String[] args) {
        SpringApplication.run(MainApp.class, args);
    }
}

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 ...

Semih Erkaraca
quelle
4

In der Hauptklasse hat nach der Konfiguration "@SpringBootApplication" das Hinzufügen von "@ComponentScan" ohne Argumente für mich funktioniert !!!

Hauptklasse :

@SpringBootApplication
@ComponentScan
public class CommentStoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(CommentStoreApplication.class, args);

    }
}

RestController-Klasse:

@RestController
public class CommentStoreApp {

    @RequestMapping("/") 
    public String hello() {
        return "Hello World!";
    }
}

PS: Verpassen Sie nicht, die Befehle mvn clean und mvn install auszuführen, bevor Sie die Anwendung starten

Harika
quelle
4

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

  1. Sie können die Funktion deaktivieren, indem Sie sie server.error.whitelabel.enabled=falsein 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

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

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.

Joginder Malik
quelle
3

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.

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
**@ComponentScan({"com.example.demo", "controller", "service"})**
public class SpringBootMvcExample1Application {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMvcExample1Application.class, args);
    }
}

Hinweis: Hier habe ich verschiedene Klassen wie Demo, Controller und Service angegeben, die gescannt werden sollen. Nur dies funktioniert ordnungsgemäß.

Rupesh Bharuka
quelle
3

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.

Sakgeek
quelle
- com.mypackage + nameApplication.java - com.mypachage.model - com.mypachage.controller - com.mypachage.dao
sakgeek
3

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

@SpringBootApplication(scanBasePackages = {"com.module.restapi1.controller"})

oder erstellen Sie eine Pakethierarchie, in der das untergeordnete Paket vom Hauptpaket abgeleitet ist

package com.module.restapi;
package com.module.restapi.controller
anand shukla
quelle
2

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.

gregturn
quelle
2

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:

@RestController("/endpoint")
public class EndpointController {

Und das war in Ordnung

@RestController
@RequestMapping("/endpoint")
public class EndpointController {
Elas
quelle
2

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

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;


@RestController
public class HelloController {
@RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }

}
Sithija Piyuman Thewa Hettige
quelle
1

Ändern Sie @Controller in Ihrer Controller-Klasse in @RestController, und alles sollte reibungslos funktionieren.

Supernova
quelle
1

Ich habe auch den gleichen Fehler erhalten und konnte den Fehler beheben, indem ich die folgende Abhängigkeit zu meiner pom.xml hinzufügte.

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

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.

Sujana
quelle
1

Ich war mit diesem Problem konfrontiert und stellte später fest, dass mir die @ConfigurationAnmerkung in der MvcConfigKlasse fehlte, die im Grunde die Zuordnung für ViewControllersund vornimmtsetViewNames .

Hier ist der Inhalt der Datei:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
**@Configuration**
public class MvcConfig implements WebMvcConfigurer{
   public void addViewControllers(ViewControllerRegistry registry)
   {
      registry.addViewController("/").setViewName("login");
      registry.addViewController("/login").setViewName("login");
      registry.addViewController("/dashboard").setViewName("dashboard");
   }
}

Hoffe das hilft jemandem !!

Arupesh RoyChowdhury
quelle
Das hat es für mich getan.
Anthony Okoth
1

Stellen Sie sicher, dass Jasper und JSTL in der Liste der Abhängigkeiten enthalten sind:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

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

Yersin
quelle
1

Die Hauptklasse muss sich außerhalb der Baumstruktur Ihrer App-Pakete befinden. Beispielsweise: Beispiel

Paulo Berezini
quelle
0

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 :

package com.example;

/**
 * Created by sartika.s.hasibuan on 1/10/2017.
 */
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");
    }

}
Sartika Hasibuan
quelle
0

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
0

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.

Mert Nuhoglu
quelle
0

Stellen Sie sicher, dass Ihr Main. Klasse sollte auf Ihren Controllern sein. Im Fall des folgenden Beispiels:

Hauptklasse mit:

@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

EmployeeController. Klasse mit:

@RestController
public class EmployeeController {
    @InitBinder
    public void setAllowedFields(WebDataBinder dataBinder) {
        dataBinder.setDisallowedFields("id");
    }

    @RequestMapping(value = "/employee/save", method = RequestMethod.GET)
    public String save(){
        Employee newEmp = new Employee();
        newEmp.setAge(25);
        newEmp.setFirstName("Pikachu");
        newEmp.setId(100);
        return "Name: " + newEmp.getFirstName() + ", Age: " + newEmp.getAge() + ", Id = " + newEmp.getId();
    }
}

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 .

Abed G.
quelle
0

Fügen Sie in Ihrer Java-Datei (z. B. Viper.java) mit der Hauptklasse Folgendes hinzu: "@RestController" und @RequestMapping ("/")

@SpringBootApplication
@RestController
public class Viper {

  @RequestMapping("/")

   public String home(){
          return "This is what i was looking for";                      
     }

public static void main( String[] args){

   SpringApplication.run(Viper.class , args);
}

}
Mayur Chavan
quelle
0

Überprüfen Sie, ob Sie die Controller-Klasse mit der Annotation @RestController markiert haben .

Karthik Kamath
quelle
0

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

Jasbin Karki
quelle
0

Ich hatte das gleiche Problem mit gradle und es wurde gelöst, indem folgende Abhängigkeiten hinzugefügt wurden:

compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
compile('org.apache.tomcat.embed:tomcat-embed-jasper')

früher fehlte mir der letzte, der den gleichen Fehler verursachte.

siddhartha attri
quelle