Spring Boot应用程序错误页面

时间:2016-01-28 19:17:30

标签: java spring spring-mvc spring-boot

我开始学习Spring Boot,我正在关注youtube上的教程。但是,我的项目发生了一件奇怪的事情。我刚刚创建了一个名为 GreetingController 的Controller。以下是该类的完整代码

@RestController
@EnableAutoConfiguration
public class GreetingController {

    private static BigInteger nextId;

    private static Map<BigInteger, Greeting> greetingMap;

    private static Greeting save(Greeting greeting) {
        if (greetingMap == null) {
            greetingMap = new HashMap<BigInteger, Greeting>();
            nextId = BigInteger.ONE;
        }
        greeting.setId(nextId);
        nextId = nextId.add(BigInteger.ONE);
        greetingMap.put(greeting.getId(), greeting);
        return greeting;
    }

    static {
        Greeting g1 = new Greeting();
        g1.setText("Hello World");
        save(g1);

        Greeting g2 = new Greeting();
        g2.setText("Hola Mundo");
        save(g2);
    }

    @RequestMapping(value = "/api/greetings", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Collection<Greeting>> getGreetings() {

        Collection<Greeting> greetings = greetingMap.values();

        return new ResponseEntity<Collection<Greeting>>(greetings,
                HttpStatus.OK);

    }

}

控制器位于以下包装中:

enter image description here

但是,当我使用网址http://localhost:8080/api/greetings引导应用程序时,我的页面上会出现以下错误:

enter image description here

但是,当我将GreetingController放在 Application 类的相同包中时,如下图所示:

enter image description here

然后获得相同的网址http://localhost:8080/api/greetings,我得到了正确的回复:

enter image description here

任何人都可以解释我为什么吗?

2 个答案:

答案 0 :(得分:3)

将您的com.example包重命名为org.example。当您放置@SpringBootApplication注释时,Spring启动会扫描控制器所有类包的子包。

或者将@ComponentScan("org.example")放在同一个班级。通过这种方式,您可以告诉spring boot在哪里搜索控制器(以及其他bean)。

答案 1 :(得分:1)

如果您想支持在另一个软件包中安装控制器,则需要将其包含在应用程序的组件扫描中。

Application.java中,您可以添加以下内容:

@ComponentScan({com.example, org.example})

默认情况下,Application所在的软件包将包含在ComponentScan中,这就是为什么当控制器与Application在同一个软件包中时它适用于你。

此外,您不需要控制器上的@EnableAutoConfiguration注释,仅供参考。