Tags: Java

Java: Dlaczego Spring MVC odpowiada z 404 i zgłasza No mapping found for HTTP request with URI [...] in DispatcherServlet?

Komunikat `404 Not Found` wraz z błędem "No mapping found for HTTP request with URI [...] in DispatcherServlet" w Spring MVC zwykle wskazuje na to, że aplikacja nie była w stanie znaleźć kontrolera lub metody obsługującej żądanie HTTP dla podanego URI. Oto niektóre z potencjalnych przyczyn tego problemu oraz jak można je rozwiązać:

Nieprawidłowa konfiguracja kontrolera

Sprawdź, czy klasa kontrolera jest poprawnie adnotowana za pomocą `@Controller` lub `@RestController`.
- Upewnij się, że metoda w kontrolerze ma ustawioną adnotację `@RequestMapping` (lub `@GetMapping`, `@PostMapping`, itd.) z właściwym adresem URL.

Brak skanowania komponentów

Upewnij się, że Spring skanuje pakiety zawierające kontrolery. Można to zrobić przez adnotację `@ComponentScan` w klasie konfiguracyjnej lub w `applicationContext.xml`.

Błędne URI

Sprawdź, czy żądanie HTTP jest wysyłane na prawidłowe URI, które odpowiada mapowaniu w kontrolerze.
- W przypadku aplikacji w kontenerze serwletów, takim jak Tomcat, upewnij się, że kontekst aplikacji jest prawidłowo uwzględniony w URI.

Nieprawidłowe mapowanie DispatcherServlet

W pliku `web.xml` lub w konfiguracji Java (klasa `WebApplicationInitializer`), upewnij się, że `DispatcherServlet` jest prawidłowo zmapowany na URL-e. Powszechnym błędem jest mapowanie na określone URL-e zamiast na '/' lub '/*'.

Problem z widokami

Jeśli kontroler jest prawidłowo odnaleziony, ale zwraca nazwę widoku, który nie istnieje lub nie jest rozpoznawany, to również może wystąpić błąd 404.

Błędne przekierowania

Sprawdź, czy nie ma błędnych przekierowań wewnątrz aplikacji, które mogłyby prowadzić do nieistniejących adresów URL.

Błąd w konfiguracji zabezpieczeń

Jeśli używasz Spring Security, upewnij się, że konfiguracja zabezpieczeń nie blokuje dostępu do zasobów kontrolera.

Aby rozwiązać ten problem, zaleca się krok po kroku weryfikację powyższych elementów konfiguracyjnych i zapewnienie, że wszystkie adnotacje i mapowania są stosowane prawidłowo oraz że nie ma literówek lub innych błędów w nazwach ścieżek URI. Ponadto przydatne może być włączenie szczegółowego logowania Spring MVC, aby uzyskać więcej informacji o tym, co dzieje się podczas przetwarzania żądania.