Học viên: Lê Đăng Quang
Lớp: Java Fullstack 15
Email: ledangquang443@gmail.com
Số điện thoại: 0929554386
Nguồn tham khảo: https://www.baeldung.com/spring-controller-vs-restcontroller


1. Tổng quan

Trong bài hướng dẫn ngắn này, chúng ta sẽ bàn luận về sự khác biệt giữa 2 annotations @Controller@RestController trong Spring. Chúng ta có thể sử dụng @Controller cho các controller truyền thống, và nó đã trở thành 1 phần của framework trong một khoảng thời gian rất dài.

Tuy nhiên, phiên bản Spring 4.0 đã giới thiệu @RestController để làm đơn giản hóa việc tạo ra các RESTful web services. Nó là một annotation tiện lợi kết hợp giữa @Controller@ResponseBody, @Rescontroller giúp loại bỏ việc phải chú thích ở mỗi phương thức xử lý request của controller khi sử dụng annotation @ResponseBody.

2. @Controller

Chúng ta có thể chú thích một class controller bằng annotation @Controller. Nó đơn giản chỉ là một class @Component cho phép chúng ta tự động phát hiện các class implementation thông qua classpath scanning. Chúng ta thường sử dụng @Controller kết hợp với @RequestMapping cho các phương thức xử lý request.

Cùng xem một ví dụ đơn giản với @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) {
        // ...
    }
}

Chúng ta đã đánh dấu phương thức xử lý request bằng @ResponseBody. Điều này cho phép tự động chuyển đổi đối tượng trả về thành HttpResponse.

3. @RestController

@RestController là một phiên bản đặc biệt của @Controller. Nó bao gồm @Controller@ResponseBody , và do đó nó giúp làm đơn giản hơn việc triển khai 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) {
        // ...
    }
}

Controller được đánh dấu với annotation @RestController sẽ không cần sử dụng đến @ResponseBody nữa, tất cả các request sẽ được tự động trả về đối tượng bên trong HttpResponse.

4. Kết luận

Trong bài viết này, chúng ta đã thấy các REST controller cổ điển và chuyên dụng có sẵn trong Spring Framework. Và như chúng ta đã thấy @RestController rất tiện dụng trong việc xây dựng các RESTful API trong ứng dụng Spring Boot vậy nên mọi người hoàn toàn có thể tự viết thử các ví dụ để luyện tập thêm việc xây dựng các API cho riêng mình.