Chào bạn , chắc bạn đang phân vân Request Param và Path Variable có khác gì nhau không ? Khi nào dùng thì bài viết hôm nay anh sẽ trình bày sự khác nhau đó .
Chúng ta sử dụng Request Param ở controller để lấy giá trị người dùng nhập trên trình duyệt. Ví dụ khi người dùng gõ vào đường link như sau để gửi 2 giá trị 10 và 20 lên server .
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
Phía Controller ta sẽ dùng @RequestParam để bắt lại 2 giá trị 10 và 20 như sau :
1
2
3
public String getDetails(@RequestParam(value="param1", required=true) String param1, @RequestParam(value="param2", required=false) String param2){
}
Sử dụng Path Variable ở Controller để lấy giá trị người dùng nhập trên trình duyệt. Nhưng ở đây mình sẽ không dùng theo định dạng key và value như ?param1=10¶m2=20. Mà thay vào đó chúng ta sẽ sử dụng định dạng khác là /param/10.
Ví dụ khi người dùng nhập vào url sau và muốn truyền 1234 lên Controller thì bên Controller ta xử lý như sau . http://localhost:8080/MyApp/user/1234
1
2
3
4
5
@RequestMapping(value="/user/{userId}", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user) {
...
}
@RequestMapping(value=”/user/{userId}” : chúng ta khai báo định dạng là /user/{userId}. Như vậy nó sẽ map với trình duyệt có định dạng là user/1234
@PathVariable chúng ta sẽ lấy số 1234 từ trình duyệt và gắn vào biến int user.
Về mặt kỹ thuật chúng ta có thể sử dụng cả 2 phương pháp PathVariable và RequestParam trong một Controller để lấy giá trị từ url như sau.
http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
1
2
3
4
5
6
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
}
Trong đó PathVariable sẽ sử dụng định dạng là /user/{userId}. Trong khi đó @RequestParam sẽ sử dụng định dạng key và value date (key) =12-05-2013 (value).
Cả 2 cách trên đều thực hiện chung một nhiệm vụ là lấy các tham số từ người dùng truyền lên. Bạn sử dụng cái nào cũng làm được mục đích của mình. Tuy nhiên tuỳ vào thiết kế của một hệ thống mà lựa chọn Request Param hoặc Path Variable để sử dụng mới đem lại hiệu quả cao được. Lấy ví dụ mình viết Restful Web Service thì chắc chắn mình phải dùng Path Variable. Còn thường sử dụng Request Param khi ta chỉ muốn query data trên URL.