Controller@ :
یکی از annotation های قدیمی اسپرینگ است که از زمان زیادی بخشی از فریم ورک اسپرینگ بوده است. با استفاده از این annotation ما کلاس های کنترلر را به طور عموم مشخص میکنیم که میتواند کاربرد عمومی و معمول تری را داشته باشد که میتواند توسط کلاس های Component@ اسکن و تحت عنوان controller شناسایی شوند.
کلاس هایی که نقش کنترلر را دارند که همراه با RequestMapping@ برای متناظر کردن درخواست های دریافتی تعریف میشوند مانند زیر :
@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@ برای تبدیل و سریالایز کردن (بصورت JSON) دیتای درون Object برگشتی Book به HttpResponse بکار گرفته شده است
RestController@ :
این annotation از Spring 4.0 اضافه شده است و برای راحتی ایجاد وب سرویس های RESTful مورد استفاده قرار میگیرد. با استفاده از این annotation دیگر نیازی نیست که از Controller@ روی کلاس و ResponseBody@ روی تک تک متد ها استفاده کنیم (در وب سرویس REST ما همیشه نیاز داریم دیتایی را در هر درخواست به کلاینت ارسال کنیم برای همین اگر از این annotation استفاده نکنیم همیشه نیاز داشتیم که از 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) { // ... } }