@Controller注解和@RestController注解有什么区别?
注:本篇文章是对此篇的翻译,有兴趣的同学可以点击 查看原文
太长不看版:@RestController = @Controller + @ResponseBody
1. 概述
在这个快速指南中,我们将会讨论Spring MVC中 @Controller 和 @RestController这两个注解的区别。
@Controller用于传统的Spring 控制器中,并且在很长一段时间内都是框架的一部分。
@RestController注解是从Spring 4.0引入的,用于简化RESTful 接口的创建。
它是个非常方便的注解,是@Controller 和 @ResponseBody的组合。
这样就不需要在Controller中的每个方法上都加上一遍@ResponseBody注解。
2. Spring MVC @Controller
通常的控制器可以使用@Controller注解,这是@Component 类的一个特别的实现,允许通过类路径扫描自动检测到实现类。
举个栗子:
@Controller
@RequestMapping("books")
public class SimpleBookController {
@GetMapping("/{id}", produces = "application/json")
public @ResponseBody Book getBook(@PathVariable int id) {
return findBookById(id);
}
private Book findBookById(int id) {
// ...
}
}
处理请求的方法上加了@ResponseBody注解。可以将返回对象自动序列化到HttpResponse。
3. Spring MVC @RestController
@RestController是@Controller的特别版,它包括@Controller和@ResponseBody注解,因此简化了控制器的实现:
@RestController
@RequestMapping("books-rest")
public class SimpleBookRestController {
@GetMapping("/{id}", produces = "application/json")
public Book getBook(@PathVariable int id) {
return findBookById(id);
}
private Book findBookById(int id) {
// ...
}
}