我有一些Spring Boot Rest教程。 调用时无法到达控制器方法:
http://localhost:8090/customers/stam
Tomcat日志:
o.s.b.w.embedded.tomcat.TomcatWebServer:Tomcat在端口上启动: 8090(http),上下文路径为“
t.s.SpringbootRestDemoApplication:在2.696秒内启动SpringbootRestDemoApplication(JVM运行4.042)
我得到的答复:
{
"timestamp": "2019-06-02T12:25:03.400+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/customers/stam"
}
可以帮忙吗?
package ttt.springboot_rest_demo;
import ...
@SpringBootApplication
@ComponentScan({"springboot_rest_demo.controller", "springboot_rest_demo.data"})
public class SpringbootRestDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootRestDemoApplication.class, args);
}
}
package ttt.springboot_rest_demo.controller;
import ...
@RestController
@RequestMapping("/customers")
public class CustomerController {
@RequestMapping(value = "/stam", method = RequestMethod.GET)
public ResponseEntity < Customer > getCustomer() {
return new ResponseEntity < >(new Customer(), HttpStatus.OK);
}
}
package ttt.springboot_rest_demo.data;
public class Customer {
private String name;
private int age;
private String email;
private Long id;
//getters and setters
}
这只是项目的一部分。我也使用了服务类,但是由于失败,我添加了一个简单的控制器方法,该方法现在不需要该服务类,只是为了简化示例。
答案 0 :(得分:2)
您的ComponentScan不正确,请检查软件包(这些软件包名称不存在):
@ComponentScan({"springboot_rest_demo.controller", "springboot_rest_demo.data"})
您的控制器位于ttt.springboot_rest_demo.controller
软件包中。将ComponentScan中的软件包名称更改为此软件包。
@ComponentScan({"ttt.springboot_rest_demo.controller", "springboot_rest_demo.data"})
或者,只需省略ComponentScan也可以为您工作,因为这样您将依靠Spring Boot的默认行为来扫描SpringBootApplication下的所有软件包。
请注意,如果您的控制器不是托管bean(例如,未通过ComponentScan扫描),则添加的任何Spring注释(如RequestMapping,RestController)都将被忽略。