Я пытаюсь добавить контроллер в стартовый проект Spring, но сопоставленный путь всегда возвращает ошибку 404.
Сначала я загрузил проект maven из https://start.spring.io/, затем создал каталог контроллеров и добавил HomeController.java в каталог src/main/java/com/example/controllers:
package com.example.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/test")
public String test() {
return "123";
}
}
И я запускаю приложение spring-boot с помощью mvn spring-boot:run
и тестирую /test с помощью curl:
%> curl http://127.0.0.1:8080/test
{"timestamp":"2022-04-07T02:00:37.745+00:00","status":404,"error":"Not Found","path":"/test"}
Что не так с контроллером?
Я предлагаю вам сослаться на некоторые из этой ссылки https://spring.io/guides/gs/rest-service/
Вам нужно сообщить Spring, какие компоненты необходимо отсканировать и зарегистрировать. Так что добавьте @ComponentScan("com.example.controllers")
к DemoApplication
.
@ComponentScan("com.example.controllers")
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Это сработало. Я действительно следил за этой статьей, и она не требует аннотации ComponentScan: spring.io/guides/gs/rest-service. Зачем мне добавлять аннотацию?
@daisy Spring будет сканировать com.example.demo
и его подпакеты, такие как com.example.demo.controller
и com.example.demo.service
, в соответствии с аннотацией @SpringBootApplication
. Но ваш com.example.controllers
не является подпакетом com.example.demo
Вы можете поделиться содержимым файла свойств приложения здесь? вы установили контекстный путь, если да, вам нужен URL-адрес, например путь/тест 127.0.0.1:8080/вашконтекст