คำอธิบายประกอบ Spring @Controller และ @RestController

1. ภาพรวม

ในการกวดวิชาอย่างนี้เราจะหารือเกี่ยวกับความแตกต่างระหว่าง@Controllerและ@RestControllerคำอธิบายประกอบในฤดูใบไม้ผลิ MVC

คำอธิบายประกอบแรกใช้สำหรับตัวควบคุม Spring แบบดั้งเดิมและเป็นส่วนหนึ่งของเฟรมเวิร์กมาเป็นเวลานาน

@RestControllerคำอธิบายประกอบเป็นที่รู้จักในฤดูใบไม้ผลิ 4.0 เพื่อให้ง่ายต่อการสร้างบริการเว็บสงบ เป็นคำอธิบายประกอบเพื่อความสะดวกที่รวม@Controllerและ@ResponseBodyซึ่งไม่จำเป็นต้องใส่คำอธิบายประกอบทุกวิธีการจัดการคำขอของคลาสคอนโทรลเลอร์ด้วยคำอธิบายประกอบ@ResponseBody

2. สปริง 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

ทุกวิธีการจัดการตามคำขอของระดับการควบคุม serializes วัตถุกลับไปโดยอัตโนมัติHttpResponse

4. สรุป

ในบทความนี้เราได้เห็นตัวควบคุม REST แบบคลาสสิกและแบบพิเศษที่มีอยู่ใน Spring Framework

ซอร์สโค้ดที่สมบูรณ์สำหรับตัวอย่างมีอยู่ในโครงการ GitHub นี่เป็นโครงการ Maven ดังนั้นจึงสามารถนำเข้าและใช้งานได้ตามที่เป็นอยู่