我正在尝试简化示例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
。
我想念什么?
答案 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)
答案 2 :(得分:0)
@RestController是@Controller和@ResponseBody的组合。因此请求处理方法将对象以Json或XML的形式返回到HttpResponse中,因此不需要@ResponseBody。
@RestController
public class UserRestController { }
@Controller
@ResponseBody
public class UserController { }
@ResponseBody是一个Spring注释,它将返回值的方法绑定到Web响应主体,它告诉控制器返回的对象会自动序列化为JSON并传递回HttpResponse对象。