1. 概述
本教程將討論 Spring MVC 中 <em @Controller</em>> 和 <em @RestController</em>> 註解之間的區別。
我們可以使用第一個註解來構建傳統的 Spring 控制器,該註解在框架中已經存在很長時間了。
Spring 4.0 引入了 <em @RestController</em>> 註解,以便簡化 RESTful Web 服務的創建。這是一個方便的註解,它結合了 <em @Controller</em>> 和 <em @ResponseBody</em>>,從而消除了對控制器類中每個請求處理方法的註解 <em @ResponseBody</em>> 的需求。
2. Spring MVC 中的 <em @Controller>
我們可以使用 <em @Controller> 標註傳統的控制器。這只是 <em @Component> 類的專業化,允許通過類路徑掃描自動檢測實現類。
我們通常將 <em @Controller> 與 <em @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 控制器。