Sử dụng annotation @RequestParam cùng với annotation @RequestMapping chúng ta có thể bind request parameter với tham số của phương thức trong Spring MVC. Cụ thể như thế nào? Chúng ta sẽ cùng nhau tìm hiểu trong bài viết này nhé các bạn!
Giả sử bây giờ, chúng ta cần xây dựng một Controller để handle request từ client có dạng như sau: /login?username=Khanh&password=abc.
Thông thường để giải quyết bài toán này, chúng ta sẽ tạo mới một Controller với một phương thức có dạng như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com.huongdanjava; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class LoginController { @RequestMapping(value = "/login") public void login(HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); } } |
Với đối tượng HttpServletRequest chứa tất cả các thông tin từ request, chúng ta có thể dễ dàng lấy giá trị của 2 request parameter là username và password.
Tuy nhiên ở đây chúng ta còn một cách khác dễ dàng hơn để lấy thông tin của 2 request parameter username và password, đó là sử dụng annotation @RequestParam trong Spring MVC.
Với @RequestParam annotation, code của chúng ta chỉ đơn giản như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.huongdanjava; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class LoginController { @RequestMapping(value = "/login") public void login(@RequestParam String username, @RequestParam String password) { } } |
Như các bạn thấy, chúng ta không cần phải sử dụng đối tượng HttpServletRequest để lấy giá trị của 2 parameter username và password nữa. Bây giờ, giá trị của 2 parameter này đã tự động được bind vào hai biến username và password trong phương thức login(). Việc tự động bind này chỉ xảy ra trong trường hợp tên biến trong phương thức và tên của request parameter giống nhau thôi nhé các bạn!
Nếu tên biến trong phương thức và tên của request parameter không giống nhau thì các bạn có thể sử dụng thuộc tính value của annotation @RequestParam và khai báo tên của request parameter để bind.
Ví dụ giờ tên biến username mình muốn đặt ngắn gọn chỉ là user thì mình sẽ khai báo thêm thuộc tính value của annotation @RequestParam như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.huongdanjava; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class LoginController { @RequestMapping(value = "/login") public void login(@RequestParam(value = "username") String user, @RequestParam String password) { } } |
Với annotation @RequestParam, chúng ta còn chỉ định được request parameter là bắt buộc hay không bắt buộc bằng cách khai báo thêm thuộc tính required.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.huongdanjava; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class LoginController { @RequestMapping(value = "/login") public void login(@RequestParam(value = "username", required = false) String user, @RequestParam String password) { } } |
Mặc định nếu các bạn không khai báo thuộc tính required thì giá trị của nó là true nha các bạn!
Và điều cuối cùng mình muốn nói liên quan đến annotation @RequestParam đó là: chúng ta có thể chỉ định giá trị mặc định của một request parameter trong trường hợp request parameter này bị null hoặc empty.
Ví dụ mình khai báo request parameter username như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com.huongdanjava; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class LoginController { @RequestMapping(value = "/login") public void login( @RequestParam(value = "username", required = false, defaultValue = "Khanh") String user, @RequestParam String password) { } } |
Huỳnh Văn Thùy
Bài viết hay. Cảm ơn anh đã chia sẽ