post-image

Phân biệt @Controller và @RestController

REST API

NỘI DUNG BÀI VIẾT

Trong bài viết này chúng ta sẽ cùng tìm hiểu và phân biệt @Controller và @RestController trong Spring Boot.

@Controller thường hay được sử dụng cho Spring Controller truyền thống hay được sử dụng trong các phiên bản Spring từ 4.0 trở xuống. 

@RestController được giới thiệu từ phiên bản Spring 4.0 để đơn giản hóa việc tạo ra các RESTful web service. Nó là sự kết hợp của annotaiton @Controller và @ResponseBody.

@Controller

Các controler truyền thống thường được đánh dấu với annotation @Controller. @Controller sẽ được sử dụng với annotation @RequestMapping trên các phương thức để xử lý các request

@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) {
        // ...
    }
}Code language: PHP (php)

Như các bạn thấy ở trên để xây dựng được RESTful API chúng ta cân phải sử dụng thêm annotation @ResponseBody để đánh dấu Phương thức xử lý các request.  Annotation này sẽ cho phép tự động trả về đối tượng vào HttpResponse.

@RestController

@RestController là một phiên bản đặc biệt của controller, nó được kết hợp bởi @Controller và @ResponseBody giúp cho việc xây dựng các RESTful API được dễ dàng hơn, đơn giản hơn và ở đây mình cũng sử dụng @RequestMapping để chỉ đường dẫn tới source chung là book-rest và sử dụng annotation @GetMapping để đánh dấu phương thức này là GET.

@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) {
        // ...
    }
}Code language: PHP (php)

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.

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.

Leave a Reply

Your email address will not be published. Required fields are marked *