[Spring] - Difference beetween @RequestParam and @PathVariable
Bài đăng này đã không được cập nhật trong 2 năm
@RequestParam
và @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"¶m2="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 bindingrequired
: 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"¶m2="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