SpringMVC获取请求参数可以有多种方式实现,对请求方式上也有些差异,现做下总结。
从前端(浏览器)发送请求到后端基本脱离不了POST,GET
两种方式,其它方式在应用中几乎绝迹,不参与分析。SpringMVC获取这两种请求的参数有多种方式。
请求地址
统一定义请求方式和参数
GET
请求:http://localhost/sys/sysUserLogin?account=admin&password=112233
POST
请求`:http://localhost/sys/sysUserLogin,参数是{"name":"admin","password":"112233"}
GET
的Restful
风格请求:http://localhost/sys/sysUserLogin/admin/1122331
系统用户实体类:SysUser
1 2 3 4 5 6 7
| public class SysUser { private String account; private String password;
.....set/get方法.....
}
|
Controller方法接收参数
方法中定义形参接收
方法中的形参类型和形参名与请求的参数匹配,可以自动接收请求的参数。
GET
和POST
两种方式都支持。
1 2 3 4 5 6 7 8 9
| @Controller @RequestMapping("/sys") public class SysUserController { @RequestMapping("/sysUserLogin") public void sysUserLogin(String account, String password) { System.out.println("account = " + account + "; password = " + password ); } }
|
方法中使用对象接收
方法中的对象属性与请求的参数匹配,可以将值自动绑定到对象对应属性上。
GET
和POST
两种方式都支持。
1 2 3 4 5 6 7 8 9
| @Controller @RequestMapping("/sys") public class SysUserController { @RequestMapping("/sysUserLogin") public void sysUserLogin(SysUser sysUser) { System.out.println("SysUser = " + sysUser); } }
|
HttpServletRequest接收
通过HttpServletRequest
的getParameter()
方法从request
中取值。
GET
和POST
两种方式都支持。
1 2 3 4 5 6 7 8 9 10 11 12
| @Controller @RequestMapping("/sys") public class SysUserController { @RequestMapping("/sysUserLogin") public void sysUserLogin(HttpServletRequest req) { String account = (String) req.getParameter("account"); String password = (String) req.getParameter("password"); System.out.println("account = " + account + "; password = " + password ); } }
|
@PathVariable绑定
@PathVariable
注解可以把路径中的参数绑定到方法中的形参上。
请求链接:http://localhost/sys/sysUserLogin/admin/1122331
只支持GET
方式。
1 2 3 4 5 6 7 8 9
| @Controller @RequestMapping("/sys") public class SysUserController { @RequestMapping("/sysUserLogin/{account}/{password}") public void sysUserLogin(@PathVariable String account, @PathVariable String password) { System.out.println("account = " + account + "; password = " + password ); } }
|
@ModelAttribute绑定
@ModelAttribute
注解可作用在方法上,也可作用在方法形参上。
GET
和POST
两种方式都支持。
- 把请求参数绑定在形参上
1 2 3 4 5 6 7 8 9 10 11 12
| @Controller @RequestMapping("/sys") public class SysUserController { @RequestMapping("/sysUserLogin") public void sysUserLogin( @ModelAttribute("account") String account, @ModelAttribute("password") String password) { System.out.println("account = " + account + "; password = " + password); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| 2. 把请求参数绑定用户实体类属性上。 ``` java //绑定用户实体类 @Controller @RequestMapping("/sys") public class SysUserController {
@RequestMapping("/sysUserLogin") public void sysUserLogin(@ModelAttribute SysUser sysUser, HttpServletRequest req) { System.out.println("请求方式:" + req.getMethod() + "; sysUser = " + sysUser); } }
|
参考:SpringMVC之@ModelAttribute注解的使用
@RequestParam绑定
@RequestParam
注解可以把请求参数绑定在方法形参上。
GET
和POST
两种方式都支持。
1 2 3 4 5 6 7 8 9 10 11
| @Controller @RequestMapping("/sys") public class SysUserController {
@RequestMapping("/sysUserLogin") public void sysUserLogin( @RequestParam("account") String account, @RequestParam("password") String password) { System.out.println("account = " + account + "; password = " + password); } }
|