首页 > 解决方案 > SpringBoot - Controller 和 RequestMapping 总是返回 404

问题描述

我在这里尝试示例的简化版本。该项目是在 VSCode 中使用 Springboot 扩展附带的初始化程序设置的。

DemoApplication.java

package com.sample.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

CalculatorController.java

package com.sample.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class CalculatorController {

    @RequestMapping("/")
    public String index() {
        return "index";
    }
}

我正在从 VSCode 运行应用程序并将其访问为:http://localhost:8080/. 我不断收到404错误消息。当我将@Controller注释更改为@RestController注释时,它可以工作。此外,存在resources\templates\index.html.

我错过了什么?

标签: javaspringrestmavenspring-boot

解决方案


上下文是对 Spring MVC 的一个非常高的概述,它是使用 Front Controller 设计模式设计的,其中 Dispatcher servlet 将接收所有请求并调用相应的处理程序,以便调用您的控制器方法是您的控制器类使用 @Controller 注释调度程序 servlet 考虑该返回值并尝试在您的 MVC 中找到 View ,以便您需要配置 ViewResolver 的任何一种实现,在您需要配置具有相应视图位置的 InternalResourceViewResolver 和 Themeleaf 的情况下。

如果您的控制器使用 @RestController 注释,则处理程序的返回值将被视为 Http 响应 Dispatcher servlet 不会查看任何视图(它会将返回值视为 http 响应正文)

您可以使用 @Controller 注释本身来实现相同的目的,只需在处理程序方法中添加此注释 @ResponseBody(返回值被视为 http 响应)。


推荐阅读