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對象。