Biên Dịch : Nguyễn Hoàng Đạt - Lớp Java07
Email : hoangdat3179@gmail.com
Bài viết gốc : https://www.geeksforgeeks.org/difference-between-controller-and-restcontroller-annotation-in-spring/#:~:text=%40RestController-,%40Controller is used to mark classes as Spring MVC Controller,specialized version of %40Component annotation.

1. Tổng quan về Spring Annotations

1.1 Spring Annotations

Spring Annotations là một dạng metadata cung cấp dữ liệu về một chương trình. Chú thích được sử dụng để cung cấp thông tin bổ sung về một chương trình. Nó không có ảnh hưởng trực tiếp đến hoạt động của mã mà họ chú thích. Nó không thay đổi hành động của chương trình đã biên dịch.

1.2 @Controller Annotation

@Controller Annotation: Spring @Controller annotation cũng là một chuyên ngành của chú thích @Component. Chú thích @Controller chỉ ra rằng một lớp cụ thể phục vụ vai trò của bộ điều khiển. Spring Controller annotation thường được sử dụng kết hợp với các phương thức annotated handler dựa trên annotation @RequestMapping. Nó chỉ có thể được áp dụng cho các lớp học. Nó được sử dụng để đánh dấu một lớp là trình xử lý yêu cầu web. Nó chủ yếu được sử dụng với các ứng dụng Spring MVC. Chú thích này hoạt động như một khuôn mẫu cho lớp chú thích, cho thấy vai trò của nó. Người điều phối quét các lớp chú thích như vậy để tìm các phương thức được ánh xạ và phát hiện các chú thích @RequestMapping.

@RestController Annotation: RestController được sử dụng để tạo các dịch vụ web yên tĩnh với sự trợ giúp của chú thích @RestController. Chú thích này được sử dụng ở cấp lớp và cho phép lớp xử lý các yêu cầu được thực hiện bởi khách hàng. Hãy hiểu chú thích @RestController bằng cách sử dụng một ví dụ. RestController cho phép xử lý tất cả các API REST như GET, POST, Delete và PUT yêu cầu.

2. Sự khác biệt giữa @Controller và @RestController

Bây giờ chúng ta hãy đưa ra một sự khác biệt lớn giữa hai điều này như sau. Ở đây @Controller được sử dụng để đánh dấu các lớp là Spring MVC Controller trong khi @RestController là một chú thích tiện lợi không làm gì khác hơn là thêm các chú thích @Controller@ResponseBody mà tham chiếu đến đoạn mã dưới đây như sau:

@Controller
@ResponseBody

class Controller
{
    ------
    ------
    ------
}

Nó cũng giống với

@RestController

class RestController
{
    ------
    ------
    ------
}

Cuối cùng chúng ta hãy kết luận sự khác biệt giữa chúng thông qua dạng bảng được mô tả bên dưới như sau:

@Controller@RestController
@Controller được sử dụng để đánh dấu các lớp là Spring MVC Controller.@RestController annotation là một controller đặc biệt được sử dụng trong các dịch vụ RESTful Web, và nó là sự kết hợp của @Controller và @ResponseBody annotation.
Nó là một phiên bản chuyên biệt của chú thích @Component.Nó là một phiên bản chuyên biệt của chú thích @Component.
Trong @Controller, chúng ta có thể trả về một view trong Spring Web MVC.Trong @RestControll, chúng ta không thể trả về chế độ xem
@Controller annotation chỉ ra rằng lớp là một ‘bộ điều khiển’ giống như một bộ điều khiển web.@RestController annotation chỉ ra rằng lớp là một bộ điều khiển trong đó các phương thức @RequestMapping giả định @ResponseBody ngữ nghĩa theo mặc định.
Trong @Controller, chúng ta cần sử dụng @ResponseBody trên mọi phương thức xử lý.Trong @RestController, chúng ta không cần phải sử dụng @ResponseBody trên mọi phương thức xử lý.
Nó đã được thêm vào phiên bản Spring 2.5Nó đã được thêm vào phiên bản Spring 4.0

3.Kết

Qua bài viết này chúng ta đã có thể biết được sự khác nhau giữa @Controller và @RestController Annotation.