@RestController和@Controller的区别
@RestController
和 @Controller
是Spring框架中用于定义控制器(Controller)的两个非常重要的注解,它们都用于处理HTTP请求,但它们之间存在一些关键的区别。
1.@Controller
@Controller
注解是Spring MVC的一部分,用于定义一个控制器类。- 当Spring MVC接收到一个请求时,它会根据请求的URL映射到相应的控制器类上。
@Controller
注解的类中的方法返回的是字符串(通常是视图名)或ModelAndView对象,这些返回值会用于渲染视图(通常是JSP页面)。@Controller
注解通常与@RequestMapping
或它的变体(如@GetMapping
,@PostMapping
等)一起使用来定义请求处理的方法。- 如果你希望将MVC模式中的“控制器”部分与“视图”部分分离,并且希望由Spring MVC来管理视图的渲染,那么你应该使用
@Controller
。
2.@RestController
@RestController
是Spring 4引入的一个方便的注解,它实际上是@Controller
和@ResponseBody
的组合注解。- 它意味着,当控制器中的方法返回一个对象时,Spring会自动将这个对象转换为JSON或XML(取决于请求的
Accept
头部)并写入HTTP响应体中。 @RestController
更适合构建RESTful Web服务,因为它简化了返回JSON或XML数据的过程。- 使用
@RestController
注解的控制器类中的方法通常会返回一个对象或对象列表,而不是视图名或ModelAndView对象。 @RestController
也常与@RequestMapping
或它的变体一起使用来定义请求处理的方法。
3.注意
- 如果你正在构建一个需要渲染视图的Web应用(如基于JSP的Web应用),那么你应该使用
@Controller
。 - 如果你正在构建一个RESTful Web服务,希望直接返回JSON或XML等数据格式,那么
@RestController
将是更好的选择。 @RestController
简化了返回数据的过程,因为它自动将返回的对象转换为JSON或XML,而@Controller
则需要额外的步骤来渲染视图。
上代码和效果图
@Controller注解
点击查看代码
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/init")
public String init() {
return "login";
}
}
@RestController注解
点击查看代码
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/init")
public String init() {
return "login";
}
}