Spring @controller和@RestController注解
Contents
1.概述
在这个简短的教程中,我们将讨论Spring MVC 中*@Controller和@RestController*注解之间的区别。
我们可以将第一个注解用于传统的 Spring 控制器,它已经成为框架的一部分很长时间了。
Spring 4.0 引入了*@RestController注解,以简化 RESTful Web 服务的创建。*这是一个方便的注解,结合了@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。