Spring MVC获取请求参数的几种方式

  SpringMVC获取请求参数可以有多种方式实现,对请求方式上也有些差异,现做下总结。

  从前端(浏览器)发送请求到后端基本脱离不了POST,GET两种方式,其它方式在应用中几乎绝迹,不参与分析。SpringMVC获取这两种请求的参数有多种方式。

请求地址

统一定义请求方式和参数

  1. GET请求:http://localhost/sys/sysUserLogin?account=admin&password=112233
  2. POST请求`:http://localhost/sys/sysUserLogin,参数是{"name":"admin","password":"112233"}
  3. GETRestful风格请求: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方法接收参数

方法中定义形参接收

方法中的形参类型和形参名与请求的参数匹配,可以自动接收请求的参数。
GETPOST两种方式都支持。

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 );
}
}

方法中使用对象接收

方法中的对象属性与请求的参数匹配,可以将值自动绑定到对象对应属性上。
GETPOST两种方式都支持。

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接收

通过HttpServletRequestgetParameter()方法从request中取值。
GETPOST两种方式都支持。

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注解可作用在方法上,也可作用在方法形参上。
GETPOST两种方式都支持。

  1. 把请求参数绑定在形参上
    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注解可以把请求参数绑定在方法形参上。
    GETPOST两种方式都支持。
    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);
    }
    }
作者

光星

发布于

2018-01-26

更新于

2022-06-17

许可协议

评论