@RestController,@Controller和@ResponseBody的区别和联系
问题描述
在项目中新加了一个模块后,在 Controller 中添加的类中使用了@Controller
,在测试接口的时候,检查了半天发现路径都是对的,后来又检查本地端口号,代码中是否有拦截器什么的,但是还是报错 404。
网上查了需要添加 @RequestBody
,我再去检查了一直之前的代码,发现原来是没有添加@RestController
,使得一直在找 return 到的页面,因此持续报错
知识总结
非常好记: @RestController
= @Controller
+ @RequestBody
@ResponseBody
:responseBody
通常指的是在HTTP
请求响应中,服务器返回给客户端的数据主体部分。在使用 SpringBoot 框架时,@ResponseBody
注解用于标记一个方法的返回值直接写入HTTP
响应体中,而不是作为视图名来渲染页面。@Controller
:主要用于 Web 应用,返回视图名称)、ModelAndView 对象或其他类型。以下代码就直接去到了hello.html
页面了
@Controller
public class ExampleController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello"; // 视图名称
}
}
@RestController
:主要用于 RESTful API,返回响应体内容,自动序列化为 JSON 或 XML。以下代码就是返回对应响应体
@RestController
public class ExampleController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!"; // 直接写入响应体
}
@GetMapping("/user")
public User getUser() {
User user = new User("Alice", 30);
return user; // 自动序列化为 JSON 并写入响应体
}
}
实际开发的项目中,基本上都是前后端分离。除了启动类为@Controller
,其他都为@RestController