SpringBoot-控制器和RequestMapping始终返回404

时间:2019-10-12 07:48:31

标签: java spring rest maven spring-boot

我正在尝试简化示例here的版本。该项目是使用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

我想念什么?

3 个答案:

答案 0 :(得分:0)

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

如果您的控制器带有@RestController注释,则处理程序的返回值将被视为Http响应Dispatcher servlet不会显示任何视图(它将返回值视为http响应主体)

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

答案 1 :(得分:0)

Spring MVC中的@RestController注释不过是@Controller和@ResponseBody注释的组合。它已添加到Spring 4.0中,以简化在Spring框架中RESTful Web Services的开发。

@Controller的工作是创建模型对象的Map并找到一个视图,但是@RestController只是返回对象,而对象数据则以JSON或XML的形式直接写入HTTP响应中。

table = numpy.zeros((5,5))
points = [(1,2,12), (1,3,15), (1,4,6)]
for point in points:
     numpy.add.at(table, tuple(zip(i[0:2])), i[2])
np.rot90(table)

了解更多:https://javarevisited.blogspot.com/2017/08/difference-between-restcontroller-and-controller-annotations-spring-mvc-rest.html#ixzz62Jw1WOs3

答案 2 :(得分:0)

@RestController是@Controller和@ResponseBody的组合。因此请求处理方法将对象以Json或XML的形式返回到HttpResponse中,因此不需要@ResponseBody。

@RestController
public class UserRestController { }

@Controller
@ResponseBody
public class UserController { }

@ResponseBody是一个Spring注释,它将返回值的方法绑定到Web响应主体,它告诉控制器返回的对象会自动序列化为JSON并传递回HttpResponse对象。