Questa applicazione non ha un mapping esplicito per / errore

Ho usato Maven per fare il tutorial https://spring.io/guides/gs/uploading-files/
Tutti i codici che ho usato sono stati copiati.

L’applicazione può essere eseguita, ma ottengo l’errore:

Pagina Errore whicanvasbel Questa applicazione non ha un mapping esplicito per / errore, quindi stai vedendo questo come un fallback. Mar 30 giugno 17:24:02 CST 2015 Si è verificato un errore imprevisto (tipo = Non trovato, stato = 404). Nessun messaggio disponibile

Come posso ripararlo?

Assicurati che la tua class principale sia in un pacchetto radice sopra le altre classi.

Quando esegui un’applicazione Spring Boot, (ovvero una class annotata con @SpringBootApplication), Spring eseguirà solo la scansione delle classi sotto il pacchetto della tua class principale.

com +- APP +- Application.java < --- your main class should be here, above your controller classes | +- model | +- user.java +- controller +- UserController.java 

Puoi risolvere questo problema aggiungendo un ErrorController nella tua applicazione. È ansible fare in modo che il controller degli errori restituisca una vista di cui si ha bisogno.

Errore Controller nella mia applicazione si presenta come di seguito:

 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> error(HttpServletRequest request) { Map body = getErrorAttributes(request, getTraceParameter(request)); HttpStatus status = getStatus(request); return new ResponseEntity>(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 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; } } 

La class precedente si basa sulla class Springs BasicErrorController .

Puoi istanziare il precedente ErrorController questo modo in un file @Configuration :

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

È ansible scegliere di sovrascrivere l’ ErrorAttributes ErrorAttributes implementando ErrorAttributes . Ma nella maggior parte dei casi dovrebbe essere sufficiente DefaultErrorAttributes .

Quando creiamo un’applicazione di avvio Spring, la @SpringBootApplication con @SpringBootApplication annotazione @SpringBootApplication . Questa annotazione “include” molte altre annotazioni necessarie affinché l’applicazione funzioni. Una di queste annotazioni è @ComponentScan annotazione @ComponentScan . Questa annotazione dice a Spring di cercare i componenti Spring e configurare l’applicazione da eseguire.

La class dell’applicazione deve essere in cima alla gerarchia dei pacchetti, in modo che Spring possa analizzare i pacchetti secondari e scoprire gli altri componenti richiesti.

 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); } } 

Sotto lo snippet di codice funziona come il pacchetto controller è nel pacchetto com.test.spring.boot

 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!"; } } 

Sotto lo snippet di codice NON funziona poiché il pacchetto controller NON è nel pacchetto com.test.spring.boot

 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!"; } } 

Dalla documentazione di Spring Boot:

Molti sviluppatori Spring Boot hanno sempre annotato la loro class principale con @Configuration , @EnableAutoConfiguration e @ComponentScan . Poiché queste annotazioni vengono utilizzate così frequentemente insieme (specialmente se si seguono le best practice sopra riportate), Spring Boot fornisce un’alternativa conveniente @SpringBootApplication .

L’annotazione @SpringBootApplication è equivalente all’utilizzo di @Configuration , @EnableAutoConfiguration e @ComponentScan con i loro attributi predefiniti

nel mio caso a causa della posizione del pacchetto, il che significa che il pacchetto del controller deve trovarsi sopra il pacchetto della class principale

se il mio pacchetto di class principale è il package co.companyname.spring.tutorial; qualsiasi pacchetto del controller deve package 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"; }} 

dopo aver terminato la codifica, premere il pulsante di avvio

inserisci la descrizione dell'immagine qui

un’ultima cosa per assicurarti che il tuo controller stia mappando o non solo console, dovresti vederlo in qualche modo

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

codifica felice

Nel mio caso la class controller è stata annotata con @Controller . La modifica di questo in @RestController risolto il problema. Fondamentalmente @RestController è @Controller + @ResponseBody Quindi usa @RestController , o @Controller con @ResponseBody annotazione @ResponseBody con ciascun metodo.

Alcune note utili qui: https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/

Prova ad aggiungere la dipendenza.

  org.springframework.boot spring-boot-starter-thymeleaf  

Il problema è che stai navigando su localhost: 8080 / invece di localhost: 8080 / upload come prescritto nella guida. Spring Boot ha una pagina di errore predefinita utilizzata quando si naviga su un percorso non definito per evitare di fornire dettagli specifici del server (che possono essere visualizzati come un rischio per la sicurezza).

Le opzioni disponibili sono: visita la pagina giusta, aggiungi la tua pagina di destinazione o sostituisci la pagina di errore bianca .

Per semplificare questa particolare situazione, ho aggiornato la guida in modo che utilizzi / invece di / upload.

Ho aggiunto questa dipendenza e ho risolto il mio problema.

  org.springframework.boot spring-boot-starter-thymeleaf  

Potresti avere l’errore, ad es

“Questa applicazione non ha alcuna mapping esplicita per / errore, quindi stai vedendo questo come un fallback.”

Questo perché non sta effettuando la scansione delle classi Controller e Service che devi specificare nella tua class main () come questa,

 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); } } 

Nota: qui, ho specificato varie classi come demo, controller e servizio da scansionare, quindi funzionerà correttamente.

Nella class principale, dopo la configurazione “@SpringBootApplication”, l’aggiunta di “@ComponentScan” senza avere argomenti, ha funzionato per me !!!

Classe principale:

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

Classe RestController:

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

PS: non mancare di eseguire i comandi mvn clean e mvn install, prima di avviare l’applicazione

So che non è esattamente la risposta alla domanda, ma questa domanda è la prima a comparire su Google 🙂

Problema (“Questa applicazione non ha una mapping esplicita per / errore”) appare quando si tenta di accedere all’interfaccia utente di Swagger.

Nel mio caso i problemi sono stati causati da @RestController (“/ endpoint”), che non è gestito correttamente da swagger.

Quindi, questo ha provocato errori:

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

E questo andava bene

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

Tutto quello che ho fatto per risolvere questo tipo di problema è menzionare anotation @Configuration in MVCConfig Class.

Come questo :

 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"); } } 

Ho avuto un errore simile, uso l’avvio a molla e la velocità, la mia soluzione è controllare il file application.properties, spring.velocity.toolbox-config-location ha rilevato che questa proprietà è sbagliata

Nel mio caso, questo problema si verifica quando si esegue SpringApplication da IntelliJ dopo averlo eseguito prima con Maven.

Per risolvere il problema, mvn clean prima mvn clean . Quindi eseguo SpringApplication da IntelliJ.

Cambia @Controller in @RestController nella tua class controller e tutto dovrebbe andare liscio.

Anch’io ho avuto lo stesso errore ed è stato in grado di risolvere l’errore aggiungendo la dipendenza sottostante al mio pom.xml.

  org.apache.tomcat.embed tomcat-embed-jasper provided  

La ragione è che stiamo usando JSP come vista. Il contenitore di servlet incorporato predefinito per Spring Boot Starter Web è tomcat. Per abilitare il supporto per JSP, dovremmo aggiungere una dipendenza su tomcat-embed-jasper.

Nel mio caso stavo restituendo un JSP come vista dal controller. Spero che questa risposta aiuti qualcuno che sta lottando con lo stesso problema.

Sto sviluppando un’applicazione Spring Boot per alcune settimane .. E stavo ottenendo lo stesso errore come di seguito;

Pagina Errore whicanvasbel Questa applicazione non ha un mapping esplicito per / errore, quindi stai vedendo questo come un fallback. Gio 18 Gen 14:12:11 AST 2018 Si è verificato un errore imprevisto (tipo = Non trovato, stato = 404). Nessun messaggio disponibile

Quando ottengo questo errore di massaggio ho capito che il mio controller o il resto della class del controller è definito nel mio progetto. Voglio dire che tutti i nostri pacchetti controller non sono lo stesso pacchetto con la class principale che include l’annotazione @SpringBootApplication. Voglio dire che devi aggiungere il nome del tuo controller all’annotazione @ComponentScan alla tua class principale che è inlusa @SpringBootApplication annotation.Se scrivi dei codici di seguito il tuo problema sarà risolto … La cosa più importante è che devi aggiungere il pacchetto di tutti i controller all’annotazione @ComponentScan come ho fatto nel seguente

 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); } } 

Spero che questi codici aiuteranno qualcuno …

Se trovi un altro modo per risolvere questo errore o hai qualche suggerimento per me, scrivi ai commenti … grazie …

Assicurati che il tuo principale. la class dovrebbe essere in cima ai tuoi controller. Nel caso del seguente esempio:

Main.class contenente:

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

EmployeeController. class contenente:

 @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(); } } 

Se la tua class principale si trova nella cartella radice, proprio come questo percorso: {projectname} / src / main / java / main quindi assicurati che i tuoi controller siano sotto la tua class Main. Ad esempio {projectname} / src / main / java / main / controller .

Nel file java (ad esempio: Viper.java) con la class principale aggiungere: “@RestController” e @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); } } 

Verifica se hai contrassegnato la class controller con l’ annotazione @RestController .

significa che stai tentando di accedere alla pagina che non c’è. supponiamo che il tuo file jsp sia in /webapp/home.jsp ora se usi @RequestMapping (“/ home”) sul tuo codice e restituisci “home.jsp”; allora otterrai questo errore se proverai ad accedere usando localhost: port / ma se proverai localhost: port / home non ci saranno errori puoi correggerlo controllando @RequestMapping (“/”) qui put / mapping_path del pagina a cui stai tentando di accedere. e puoi anche provare ad aggiungere una dipendenza di tomcat jaspher dalla dipendenza di Maven

Stavo affrontando lo stesso problema, usando gradle e si è risolto aggiungendo le seguenti dipendenze-

 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') 

prima mi mancava l’ultima causa dello stesso errore.

Il tutorial si aspetta che tu abbia il motore di template di Thymeleaf in classpath. Ho incontrato lo stesso problema e alla fine l’ho capito. Raggiungerò l’autore del tutorial per includere tali informazioni.

Il modo più semplice se hai seguito il tutorial è aggiungere la dipendenza al tuo pom.xml nella cartella principale del progetto. La prossima volta che eseguirai la tua app, Spring rileverà Thymeleaf e utilizzerà il modello di caricamento

  org.springframework.boot spring-boot-starter-thymeleaf  

Per l’esempio completo vedi il loro repository Github .

Fai verifiche pulite o pulite o prova ad eseguirlo. Le istanze devono essere pulite prima di distribuire l’altro progetto. Ha funzionato per me. L’ho provato per 2 giorni per capirlo.

Ho provato anche molti modi per risolvere questo problema, ho cambiato la dipendenza spring-boot-starter-web con spring-boot-starter-thymeleaf , o ho sostituito annotazione @RestController su @Controller ma era lo stesso errore. Alla fine ho trovato una soluzione aggiungendo una singola riga di annotazione @ComponentScan (basePackages = {“ciao”}) nella parte superiore della class Application e funziona perfettamente.

 @ComponentScan(basePackages = {"hello"}) public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(App.class, args); } } 

Spero che ti aiuti anche voi ragazzi.