春季启动2:无法使用控制器方法

时间:2019-06-02 12:20:23

标签: spring rest spring-boot

我有一些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"
}

可以帮忙吗?

enter image description here

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
}

这只是项目的一部分。我也使用了服务类,但是由于失败,我添加了一个简单的控制器方法,该方法现在不需要该服务类,只是为了简化示例。

1 个答案:

答案 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)都将被忽略。