+1

[Spring] - Difference beetween @RequestParam and @PathVariable

@RequestParam@PathVariable là hai annotation được sử dụng để truy cập dữ liệu từ các request. Chúng được sử dụng vào những mục đích trong những trường hợp khác nhau.

  • @RequestParam được sử dụng để truy cập (lấy) giá trị của parameters trên URL(kiểu query string)
  • @PathVariable được sử dụng để lấy giá trị trên URI theo template (còn gọi là URI template).

Để làm rõ vấn đề này mình sẽ đi vào các ví dụ cụ thể dưới đây.

@RequestParam

@RequestParam : dùng để truy cập các giá trị từ tham số truy vấn, nó có dạng :

http://localhost:8080/spring/hello/param1="abc"&param2="def"

Với URL như trên thì hai tham số param1 và param2 có thể được truy vấn như sau

@RequestMapping("/spring/hello")
public String showHello(@RequestParam(value="param1", required=true) String parameter1,
                        @RequestParam(value="param2", required=false) String parameter2) {
     // gia tri cua parameter1, parameter2 duoc su dung o day
        System.out.println("ID : " + id);
        System.out.println("Param 1 : " + param1)
        System.out.println("Param 2 : " + param2);
        return "hello";

}

Đối với @RequestParam có 4 tham số hỗ trợ:

  • defaultValue : Đây là giá trị mặc định nếu như giá trị của parameters trên URL rỗng.
  • name : tên của parameters binding
  • required : Cho biết tham số này là có bắt buộc hay không, nếu "required=true" thì thiếu parameters đó request sẽ fail.
  • value : đây là alias cho tên của thuộc tính.

Trên đây là ví dụ về GET request, @RequestParam cũng có thể lấy giá trị của các params trong POST request. Mọi người có thể qua giáo sư Google để tìm hiểu thêm.

@PathVariable

@PathVariable: xác định một khuôn mẫu trên URI khi request được gửi đến, nó có dạng :

http://localhost:8080/springmvc/hello/1?param1="123"&param2="456"

Note: param1 và param2 chính là RequestParam nói ở phần trên. Và với URL request như trên ta có thể truy vấn như sau:

@RequestMapping("/spring/hello/{id}")
public String showHello(@PathVariable(value="id") String id,
                        @RequestParam(value="param1", required=true) String parameter1,
                        @RequestParam(value="param2", required=false) String parameter2) {
     // gia tri cua id duoc su dung o day
        System.out.println("ID : " + id);
        System.out.println("Param 1 : " + param1)
        System.out.println("Param 2 : " + param2);
        return "hello";
}

Đối với@PathVariable thì nó chỉ có một giá trị thuộc tính cho mẫu URI. Trong một method có thể sử dụng nhiều @PathVariable để đón các dữ liệu khác nhau trên URI (ví dụ: lazada/orders/{orderId}/product/{productId} ), nhưng không được nhiều method cùng chung một URI patern.

Trên đây là những gì mình đọc được từ các bài viết trên mạng. Hi vọng bài viết hữu ích với mọi người.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí