Tìm hiểu về annotation @RestController trong Spring MVC

Chúng ta vẫn thường dùng annotation @Controller để phát triển các ứng dụng Spring MVC nhưng kể từ version 4.x, Spring giới thiệu một annotation khác tên là @RestController. Vậy mục đích của annotation @RestController là gì? Sự khác nhau giữa annotation @Controller và annotation @RestController như thế nào? Trong bài viết này, chúng ta hãy cùng tìm hiểu nhé các bạn!

Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ:

Tìm hiểu về annotation @RestController trong Spring MVC

Bạn nào chưa biết cách tạo thì làm theo hướng dẫn của bài viết này nhé các bạn!

Các dependencies mặc định mình đã thay đổi version như sau:

Để chạy project này, mình sẽ sử dụng Maven Jetty Pluggin:

OK, bắt đầu thôi các bạn!
Như các bạn đã biết, trong Spring MVC, Controller là class sẽ chịu trách nhiệm prepare Model và chọn View để hiển thị data trong Model lên View. Trong ví dụ mình vừa tạo, chúng ta có class HomeController là một Controller class.

Nó thêm data “serverTime” vào Model và chọn View là tập tin home.jsp nằm trong thư mục /src/main/webapp/WEB-INF/views để render giao diện.

Kết quả sẽ như sau:

Tìm hiểu về annotation @RestController trong Spring MVC

Bên cạnh nhiệm vụ prepare Model và chọn View này, Controller class còn có thể ghi dữ liệu trực tiếp vào luồng response mà không cần chọn view gì hết. Để làm được điều này, trong phương thức handle request, chúng ta phải thêm một annotation nữa là @ResponseBody.

Ví dụ như giờ mình thêm annotation @ResponseBody cho phương thức home() trong class HomeController như sau:

thì khi chạy các bạn sẽ không còn thấy kết quả như trước nữa. Thay vì nội dung của tập tin home.jsp với Model data, kết quả lúc này chỉ vỏn vẹn là “home” như phần return trong phương thức home().

Tìm hiểu về annotation @RestController trong Spring MVC

Đây là những gì mà chúng ta thường làm để phát triển các ứng dụng RESTful Web Service phải không các bạn? Chúng ta chỉ return data ở các định dạng như JSON, XML,… ngoài ra thì không cần View gì cả.

Để thuận tiện cho việc phát triển các ứng dụng RESTful Web Service, Spring đã giới thiệu thêm annotation @RestController từ version 4.x. Với annotation @RestController thay thế cho annotation @Controller, chúng ta không cần phải khai báo annotation @ResponseBody nữa.

Bây giờ nếu mình thay thế annotation @Controller bằng annotation @RestController và remove annotation @ResponseBody trong phương thức home() đi:

thì kết quả vẫn như vậy.

Nếu các bạn xem code của annotation @RestController, các bạn sẽ thấy rõ sự combine này.



5/5 - (1 bình chọn)

5 thoughts on “Tìm hiểu về annotation @RestController trong Spring MVC

Add Comment