1.概述
在本快速入门教程中,我们将讨论Spring MVC中@Controller
和@RestController
注解之间的区别。
第一个注解@Controller
用于传统的Spring控制器,并且很长时间以来一直是框架的一部分。
另一个注解@RestController
是是为了简化的RESTful Web服务的创建在Spring 4.0引入了。这是一个便利的注解,它将@Controller
和@ResponseBody
结合在一起,因此无需再使用@ResponseBody
注解来注释控制器类的每个请求处理方法。
2. Spring MVC @Controller
可以使用@Controller
注解对经典控制器进行标记。它是@Component
类的专门化,并允许通过类路径扫描自动检测实现类。
在请求处理方法上,@Controller
通常与RequestMapping注解结合使用。
让我们看一下Spring MVC控制器的简单示例:
@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
和@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) {
// ...
}
}
控制器带有@RestController
注解,因此不需要@ResponseBody
。
控制器类的每种请求处理方法都会自动将返回对象序列化为HttpResponse对象。