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 ดังนั้นจึงสามารถนำเข้าและใช้งานได้ตามที่เป็นอยู่