Ваш основной класс находится внутри com.example.demo
пакета. Это означает, что при запуске приложения Spring Boot оно будет сканировать этот пакет и все вложенные пакеты, чтобы найти компоненты Spring и зарегистрировать их.
Итак, в основном автоматическое сканирование проверит:
com.example.demo
com.example.demo.something
com.example.demo.somethingelse
Ваш класс контроллера находится в com.example.controller
, что означает, что он не будет основан.
Вы можете либо переместить его в нечто вроде com.example.demo.controller
, либо указать Spring, где он должен найти свои компоненты:
@SpringBootApplication(scanBasePackages = {"com.example.controller"})
Хорошей практикой является использование вашего основного класса в виде своего рода корневого пакета, а всего остального - во вложенных пакетах. Вот пример:
com.example.demo // main class here
com.example.demo.controller
com.example.demo.service
com.example.demo.repository
....
Тогда Spring сможет найти все автоматически, и вам не нужно будет настраивать это вручную.