Ответ
DispatcherServlet не может найти контроллер по нескольким основным причинам, связанным с конфигурацией и аннотациями.
Основные причины:
- Отсутствие аннотации контроллера – класс не помечен как
@Controllerили@RestController. - Неправильное сканирование компонентов – пакет с контроллером не указан в
@ComponentScanили находится за пределами базового пакета сканирования. - Конфликт URL-маппинга – путь, указанный в
@RequestMapping,@GetMappingи других аннотациях, не совпадает с входящим HTTP-запросом. - Отсутствие конфигурации MVC – в проектах без Spring Boot может потребоваться явное включение
@EnableWebMvcили настройкаWebMvcConfigurer. - Контроллер не является Spring-бином – класс не управляется Spring IoC-контейнером (например, создан через
new).
Пример корректного контроллера:
@RestController // Или @Controller
@RequestMapping("/api")
public class MyController {
@GetMapping("/test")
public ResponseEntity<String> test() {
return ResponseEntity.ok("OK");
}
}
Что проверить:
- Наличие аннотаций
@Controller/@RestControllerна классе. - Корректность базового пакета в
@SpringBootApplicationили@ComponentScan. - Логи запуска приложения на предмет сообщений типа
Mapped "{[/api/test],methods=[GET]}". - Соответствие HTTP-метода (GET, POST) и пути в запросе аннотациям контроллера.