Spring Boot: Решаем проблему с доступом к REST на localhost
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для того чтобы убедиться в доступности REST-контроллера, проверьте правильность указания пути в аннотации @RequestMapping
. Основной класс с @SpringBootApplication
должен быть расположен в корневой части иерархии пакетов. Код может выглядеть примерно так:
@SpringBootApplication
public class Application { /* Нет содержимого. */ }
@RestController
@RequestMapping("/api")
public class Controller {
@GetMapping("/example") // Путь к методу: /api/example
public String getExample() {
return "Все системы в норме! — Анакин Скайуокер";
}
}
Адрес вашего запроса будет следующий: http://localhost:<port>/api/example. Убедитесь в правильном указании порта, типа запроса и зависимости spring-boot-starter-web
.
Сканирование ваших компонентов производится корректно?
При появлении ошибки 404 убедитесь, что @RestController
находится в пакетах, которые сканирует Spring Boot. По умолчанию Spring Boot сканирует пакеты, расположенные в том же пакете, что и класс с аннотацией @SpringBootApplication
. Чтобы подключить контроллеры из других пакетов, используйте @ComponentScan
:
@ComponentScan(basePackageClasses = YourController.class)
Или если контроллеры находятся в разных пакетах:
@ComponentScan(basePackages = {"com.example.book", "com.example.author"})
Поместите класс с @SpringBootApplication
в корневой пакет, чтобы все контроллеры были просканированы.
Проверьте соответствие URL-сопоставлений
Пути для @RestController
определяются с помощью аннотаций @RequestMapping
или @GetMapping
. Структура полного URL выглядит так: путь контекста сервера + маршрут контроллера + путь метода.
@RestController
@RequestMapping("/api")
public class YourController {
@GetMapping("/book") // Полный URL: /api/book
public ResponseEntity<?> getBook() { /* Читайте книги, они открывают мир. */ }
}
Чтобы запрос был успешным, он должен соответствовать полному URL, заданному в коде.
Попробовали ли вы перезагрузить сервер?
Ошибки 404 часто связаны с некорректно указанным портом при запуске Spring Boot.
- Проверьте, исправно ли работает ваше приложение.
- В журнале отслеживайте, на каком порту происходит прослушивание ("Опять 8080").
- Исследуйте файл
application.properties
на наличие конфликтов или изменений порта.
Визуализация
Сводная схема:
Ваш Дом (REST-контроллер): 🏠 с дверным звонком (Endpoint)
УСПЕШНЫЙ ЗАПРОС Посетитель (Клиент) 🚶♂️ ➡️ 🛎️(Соблюдены условия/API-запрос) ➡️ 🏠 (Добро пожаловать!)
ОШИБКА 404 Посетитель (Клиент) 🚶♂️ ➡️ ❌ (Неверные условия/Отсутствует API-запрос) ➡️ 🌳 (Наткнулись на дерево вместо дома)
Для успешного исхода встречи требуется корректно указать маршрут и обеспечить работоспособность "звонка".
Требуется ли карта вашего приложения?
Определение компонентов Spring Boot происходит автоматически. Но бывает полезно:
- Воспользоваться приложением для отладки для просмотра бинов в контексте приложения Spring.
- Обратиться к актуаторным конечным точкам
/beans
или/mappings
для диагностики в режиме реального времени. - Ознакомиться с автоматически генерируемым отчетом настроек при запуске приложения.
Полезные советы
- Убедитесь, что в файле сборки Maven или Gradle присутствует
spring-boot-starter-web
. - Проверьте, что в
@RestController
есть все нужные аннотации, например@RequestMapping
или@GetMapping
. - Добавьте аннотацию
@CrossOrigin
для обработки междоменных запросов, если они поступают извне вашего домена. - Систематически используйте точки останова в вашем контроллере для выявления ошибок.
- Если вы используете Spring Security, проверьте, чтобы настройки безопасности не блокировали доступ.
Полезные материалы
- Документация по Spring Boot — детальное руководство по созданию REST-сервисов с использованием Spring Boot.
- Подробное руководство по обработке исключений в Spring Boot — описание стратегий обработки ошибок в приложениях Spring Boot.
- Конфигурация Spring Boot для MySQL — пошаговая инструкция по подключению Spring Boot к MySQL.
- Архитектура Spring Security — руководство по обеспечению безопасности ваших API с применением Spring Security.