Użyłem mavena do wykonania samouczka https://spring.io/guides/gs/uploading-files/
Wszystkie użyte kody zostały skopiowane.
Aplikacja może działać, ale pojawia się błąd:
Strona błędu białej etykiety Ta aplikacja nie ma wyraźnego mapowania błędu /, więc widzisz to jako rezerwę. Tue Jun 30 17:24:02 CST 2015 Wystąpił nieoczekiwany błąd (typ = Nie znaleziono, stan = 404). Brak wiadomości
Jak mogę to naprawić?
spring
spring-mvc
file-upload
upload
Deng Steve
źródło
źródło
Odpowiedzi:
Upewnij się, że Twoja główna klasa znajduje się w pakiecie głównym nad innymi klasami.
Kiedy uruchamiasz Spring Boot Application (tj. Klasę z adnotacją @SpringBootApplication), Spring skanuje tylko klasy poniżej głównego pakietu klas.
źródło
Kiedy tworzymy aplikację rozruchową Springa, opisujemy ją
@SpringBootApplication
adnotacją. Ta adnotacja „zamyka” wiele innych niezbędnych adnotacji, aby aplikacja działała. Jedną z takich adnotacji jest@ComponentScan
adnotacja. Ta adnotacja nakazuje Springowi wyszukanie komponentów Spring i skonfigurowanie aplikacji do uruchomienia.Twoja klasa aplikacji musi znajdować się na szczycie hierarchii pakietów, aby Spring mógł przeskanować pakiety podrzędne i znaleźć inne wymagane składniki.
Poniższy fragment kodu działa, ponieważ pakiet kontrolera znajduje się w
com.test.spring.boot
pakieciePoniższy fragment kodu NIE działa, ponieważ pakiet kontrolera NIE znajduje się w
com.test.spring.boot
pakiecieZ dokumentacji Spring Boot:
źródło
Możesz rozwiązać ten problem, dodając plik
ErrorController
w swojej aplikacji. Kontroler błędów może zwrócić widok, którego potrzebujesz.Error Controller w mojej aplikacji wygląda jak poniżej:
Powyższa klasa jest oparta na klasie Springs BasicErrorController .
Możesz utworzyć powyższą instancję
ErrorController
w@Configuration
pliku:Możesz wybrać przesłonięcie wartości domyślnej
ErrorAttributes
, implementując ErrorAttributes . Ale w większości przypadków DefaultErrorAttributes powinno wystarczyć.źródło
BasicErrorController
klas 404.BasicErrorController
nie jest już dobry, czy możesz zaktualizować?BasicErrorController
jest teraz naprawiony.W moim przypadku klasa kontrolera została opatrzona adnotacją
@Controller
. Zmiana tego, aby@RestController
rozwiązać problem. Zasadniczo@RestController
jest@Controller + @ResponseBody
więc albo użyj@RestController
, albo@Controller
z@ResponseBody
adnotacjami dla każdej metody.Kilka przydatnych informacji tutaj: https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/
źródło
@RestController
dodawania@ResponseBody
adnotacji do klasy niejawnie dodaje adnotację, ale jeśli używasz@Controller
adnotacji, musisz jawnie dodać tę adnotację samodzielnie.w moim przypadku jest to spowodowane pozycją pakietu, co oznacza, że pakiet kontrolera musi znajdować się powyżej pakietu głównej klasy
jeśli moim głównym pakietem klas jest
package co.companyname.spring.tutorial;
jakikolwiek pakiet kontrolera powinienpackage co.companyname.spring.tutorial.WHAT_EVER_HERE;
po zakończeniu kodowania naciśnij panel startowy
Ostatnia rzecz, aby upewnić się, że kontroler mapuje, czy nie jest tylko konsolą, powinieneś zobaczyć coś smilliar
szczęśliwego kodowania
źródło
Spróbuj dodać zależność.
źródło
Dzieje się tak, gdy nie zdefiniowano jawnej strony błędu. Aby zdefiniować stronę błędu, utwórz odwzorowanie błędu / z widokiem. np. poniższy kod odwzorowuje wartość ciągu zwracaną w przypadku błędu.
źródło
Dodałem tę zależność i to rozwiązało mój problem.
źródło
Rozwijam aplikację Spring Boot przez kilka tygodni .. Otrzymałem ten sam błąd, co poniżej;
Kiedy otrzymuję ten komunikat o błędzie, zdałem sobie sprawę, że moja klasa kontrolera lub kontrolera odpoczynku jest zdefiniowana w moim projekcie. Chodzi mi o to, że wszystkie nasze pakiety kontrolerów nie są tym samym pakietem z klasą główną, która zawiera adnotację @SpringBootApplication .. Chodzi mi o to, że musisz dodać nazwę pakietu kontrolera do adnotacji @ComponentScan do swojej głównej klasy, która zawiera adnotację @SpringBootApplication.Jeśli piszesz kody poniżej twój problem zostanie rozwiązany ... Najważniejsze jest to, że musisz dodać cały pakiet kontrolera do adnotacji @ComponentScan, tak jak to zrobiłem poniżej
Mam nadzieję, że te kody komuś pomogą ...
Jeśli znajdziesz inny sposób rozwiązania tego błędu lub masz dla mnie sugestie, napisz do komentarzy ... dzięki ...
źródło
W głównej klasie, po konfiguracji „@SpringBootApplication”, dodanie „@ComponentScan” bez żadnych argumentów zadziałało !!!
Klasa główna:
Klasa RestController:
PS: Nie przegap polecenia mvn clean i mvn install przed uruchomieniem aplikacji
źródło
Dość późno na przyjęcie. Zgodnie z oficjalną dokumentacją wiosny „Spring Boot instaluje stronę błędu z własnym wyglądem, która jest wyświetlana w kliencie przeglądarki w przypadku napotkania błędu serwera”. https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page
server.error.whitelabel.enabled=false
w pliku application.yml lub application.properties .2. Zalecanym sposobem jest ustawienie strony błędu tak, aby użytkownik końcowy mógł ją zrozumieć. W folderze zasobów / szablonów utwórz plik error.html i dodaj zależności w pliku pom.xml
Spring automatycznie wybierze stronę error.html jako domyślny szablon błędu. Uwaga: - Nie zapomnij zaktualizować projektu maven po dodaniu zależności.
źródło
Być może pojawia się błąd, tj
„Ta aplikacja nie ma wyraźnego mapowania dla błędu /, więc widzisz to jako rezerwę”.
Dzieje się tak, ponieważ nie skanuje on klas kontrolera i usług, które musisz określić w swojej klasie main () w ten sposób,
Uwaga: tutaj określiłem różne klasy, takie jak demo, kontroler i usługa do przeskanowania, tylko wtedy będą działać poprawnie.
źródło
Musisz zorganizować pakiety tak, aby pakiet zawierał public static main (lub tam, gdzie napisałeś @SpringBootApplication), ojca wszystkich innych pakietów.
źródło
Domyślnie rozruch sprężynowy skanuje bieżący pakiet pod kątem definicji fasoli. Więc jeśli twój bieżący pakiet, w którym zdefiniowano główną klasę i pakiet kontrolera nie jest taki sam lub pakiet kontrolera nie jest pakietem podrzędnym twojego głównego pakietu aplikacji, nie będzie skanował kontrolera. Aby rozwiązać ten problem, można dołączyć listę pakietów do definicji fasoli w pakiecie głównym
lub utwórz hierarchię pakietu, w której pakiet potomny pochodzi z pakietu głównego
źródło
Problem polega na tym, że nawigujesz do localhost: 8080 / zamiast localhost: 8080 / upload, jak opisano w przewodniku. Spring Boot ma domyślną stronę błędu używaną podczas przechodzenia do niezdefiniowanej trasy, aby uniknąć ujawniania szczegółowych informacji o serwerze (które mogą być postrzegane jako zagrożenie bezpieczeństwa).
Masz opcje: odwiedź odpowiednią stronę, dodaj własną stronę docelową lub zastąp białą stronę błędu .
Aby uprościć tę konkretną sytuację, zaktualizowałem przewodnik tak, aby używał / zamiast / upload.
źródło
Wiem, że to nie jest dokładnie odpowiedź na pytanie, ale to pytanie jest pierwsze, które pojawia się w Google :)
Problem („Ta aplikacja nie ma wyraźnego mapowania dla / błąd”) pojawia się podczas próby uzyskania dostępu do interfejsu użytkownika Swagger.
W moim przypadku problemy zostały spowodowane przez @RestController ("/ endpoint"), który nie jest obsługiwany poprawnie przez swagger.
To spowodowało błędy:
I to było w porządku
źródło
może się to zdarzyć, jeśli zapomnisz adnotacji @RestController na górze klasy kontrolera import import org.springframework.web.bind.annotation.RestController;
i dodaj adnotację jak poniżej
zapoznaj się z prostym przykładem poniżej
źródło
Zmień @Controller na @RestController w swojej klasie kontrolera i wszystko powinno pójść gładko.
źródło
Ja również dostałem ten sam błąd i mogłem go rozwiązać, dodając poniższą zależność do mojego pom.xml.
Powodem jest to, że używamy JSP jako widoku. Domyślny wbudowany kontener serwletów dla Spring Boot Starter Web to tomcat. Aby włączyć obsługę stron JSP, musielibyśmy dodać zależność od tomcat-embed-jasper.
W moim przypadku zwracałem JSP jako widok z kontrolera. Mam nadzieję, że ta odpowiedź pomoże komuś, kto boryka się z tym samym problemem.
źródło
Miałem ten sam problem, używając gradle i został rozwiązany przez dodanie następujących zależności:
wcześniej brakowało mi ostatniego powodując ten sam błąd.
źródło
Miałem do czynienia z tym problemem, a później zdałem sobie sprawę, że brakuje mi
@Configuration
adnotacji wMvcConfig
klasie, która w zasadzie wykonuje mapowanie dlaViewControllers
isetViewNames
.Oto zawartość pliku:
Mam nadzieję, że to komuś pomoże!
źródło
Upewnij się, że na liście zależności masz jasper i jstl:
Oto działający projekt startowy - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp
Autor: Biju Kunjummen
źródło
Muszę o tym wspomnieć i podać odniesienie do pakietów i udało się. Możesz wykluczyć
@EnableAutoConfiguration
tę adnotację, ale wymagane jest, aby ominąć wszelkie zależności związane z DB.źródło
Klasa główna musi znajdować się poza strukturą drzewa pakietów aplikacji. Na przykład:
źródło
Wszystko, co zrobiłem, aby rozwiązać tego rodzaju problem, to wspomnieć o anotacji @Configuration w klasie MVCConfig.
Jak ten :
źródło
Miałem podobny błąd, używam rozruchu sprężyny i prędkości, moim rozwiązaniem jest sprawdzenie pliku application.properties, spring.velocity.toolbox-config-location i okazało się, że ta właściwość jest nieprawidłowa
źródło
W moim przypadku ten problem występuje podczas uruchamiania SpringApplication z poziomu IntelliJ po pierwszym uruchomieniu go z maven.
Aby rozwiązać problem, biegnę pierwszy
mvn clean
. Następnie uruchamiam SpringApplication z poziomu IntelliJ.źródło
Upewnij się, że plik Main. klasa powinna znajdować się na górze kontrolerów. W przypadku poniższego przykładu:
Main.class zawiera:
EmployeeController. klasa zawierająca:
Jeśli twoja główna klasa znajduje się w folderze głównym, tak jak ta ścieżka: {nazwa projektu} / src / main / java / main, upewnij się, że kontrolery są poniżej klasy głównej. Na przykład {projectname} / src / main / java / main / controllers .
źródło
W swoim pliku java (powiedzmy: Viper.java) z główną klasą dodaj: „@RestController” i @RequestMapping („/”)
źródło
Sprawdź, czy oznaczyłeś klasę kontrolera adnotacją @RestController .
źródło