1. 概述
在本簡明教程中,我們將討論 @Controller 和 @RestController 註解之間的區別,在 Spring MVC 中。
我們可以使用第一個註解用於傳統的 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。
4. 結論
在本文中,我們研究了 Spring Framework 中提供的經典和專業 REST 控制器。