Học viên: Lương Quốc
Lớp: Java Fulltack 15
Email: quoc200799@gmail.com
Link tham khảo: https://www.baeldung.com/spring-controller-vs-restcontroller

1. Tổng quan

Đây là một hướng dẫn ngắn gọn, chúng ta sẽ phân biệt được sự khác nhau giữa 2 annotations @Controller@RestController trong Spring MVC.
Chúng ta có thể sử dụng annotation đầu tiên cho Spring controllers, và nó đã là một phần của framework trong một thời gian rất dài.
Giới thiệu Spring 4.0 có annotation @RestController để đơn giản hóa việc tạo các services web RESTful. Nó là một sự kết hợp có lợi giữa @Controller và @RestController, giúp loại bỏ nhu cầu chú thích mọi phương thức xử lý yêu cầu của lớp controller bằng annotation @ResponseBody.

2. Spring MVC @Controller

Chúng ta có thể chú thích lớp controllers với annotation @Controller. Đây chỉ đơn giản là một chuyên môn hóa của lớp @Component, cho phép chúng ta tự động phát hiện các lớp triển khai thông qua quá trình quét đường dẫn lớp
Chúng ta sẽ sử dụng @Controller và kết hợp với annotation @RequestMapping cho chuyển đổi phương thức
Hãy xem một ví dụ nhanh của Spring MVC controller:

@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) {
        // ...
    }
}

Chúng ta sẽ xử lý yêu cầu của phương thức với * @ResponseBody*. Annotation này cho phép tự động return ra một cách tuần tự vào HttpResponse.

3. Spring MVC @RestController

@RestController là một phiên bản chuyên nghiệp hơn của controller. Nó bao gồm cả 2 anotation @Controller@ResponseBody, và đơn giản hóa việc thực hiện controller:

@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) {
        // ...
    }
}

Bộ điều khiển được chú thích bằng annotation @RestController; do đó, @ResponseBody không bắt buộc.
Mọi phương thức xử lý yêu cầu của lớp trình điều khiển sẽ tự động tuần tự hóa các đối tượng trả về thành HttpResponse.

4. Tổng kết

Trong bài viết này, chúng tôi đã kiểm tra các bộ điều khiển REST cổ điển và chuyên dụng có sẵn trong Spring Framework.
Mã nguồn hoàn chỉnh cho các ví dụ có sẵn trong dự án GitHub. Đây là một dự án Maven, vì vậy nó có thể được nhập và sử dụng nguyên trạng.