SpringMVC获取请求参数
通过ServletAPI获取
没必要用原生的ServletApi,做个了解即可
将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请
求的请求报文的对象
@GetMapping("/GetVague")
public String GetVague(HttpServletRequest request,Model model){
// 获取参数
String name = request.getParameter("username");
String Types = request.getParameter("Types");
return "/GetInto";
}
<a th:href="@{/testParam(username='admin',Types=123456)}">测试获取请求参数-- >/testParam</a><br>
通过控制器方法的形参获取请求参数
在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参
@RequestMapping("/testParam")
//跟请求参数名字保持一致就可以获取形参
public String testParam(String username,String password){
System.out.println( username+","+password);
return "target";
}
获取同名参数值
<form action="@{/testParam}" method="post">
用户名 <input type="text" name="username">
密码 <input type="password" name="password">
爱好 <input type="checkbox" name="hoby" value="a">
爱好 <input type="checkbox" name="hoby" value="b">
爱好 <input type="checkbox" name="hoby" value="c">
<button type="submit">测速用控制器的形参获取参数</button>
</form>
有多个参数时会通过逗号来分割,也可以使用字符串数组来获取,String[]获取到的就是一个数组,在迭代出来即可
@RequestMapping("/testParam")
//跟请求参数名字保持一致就可以获取形参
public String testParam(String username,String password,String hoby){
System.out.println( username+","+password+",hoby:----"+hoby);
return "target";
}
@RequestParam 解决参数名字不匹配
<form action="/testParam" method="post">
用户名 <input type="text" name="users_name">
爱好 <input type="checkbox" name="hoby" value="a">
爱好 <input type="checkbox" name="hoby" value="b">
爱好 <input type="checkbox" name="hoby" value="c">
<button type="submit">测速用控制器的形参获取参数</button>
</form>
@RequestMapping("/testParam")
//跟请求参数名字保持一致就可以获取形参
public String testParam(
//将请求参数和形参创建映射关系
@RequestParam("users_name") String username,
String hoby){
System.out.println( username+",hoby:----"+hoby);
return "target";
}
required为False可以不必传值访问,如果是True必须要传值否则会400
@RequestParam(value = "users_name",required = false) String username,
defaultValue 设置默认值为hehe。如果获取空的参数,默认值就是自己设置的值
@RequestParam(value = "users_name",defaultValue = "hehe") String username,
@RequestHeader
@RequestHeader是将请求头信息和控制器方法的形参创建映射关系
@RequestHeader注解一共有三个属性:value、required、defaultValue,用法同@RequestParam
指定请求头信息,会在访问的请求头中找到host这个信息,赋值给形参
@RequestParam(value = "users_name", defaultValue = "hehe")
String username,
String hoby,
@RequestHeader("Host") String Host)
@CookieValue
@CookieValue是将cookie数据和控制器方法的形参创建映射关系
@CookieValue注解一共有三个属性:value、required、defaultValue,用法同@RequestParam
通过POJO实体类获取请求参数
可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,那么请求参数就会为此属性赋值
<form action="/Moldes" method="post">
用户名 <input type="text" name="users_name">
密码 <input type="password" name="users_password" value="a">
<button type="submit">测速用控制器的实体类获取参数</button>
</form>
实体类
package com.item.mvc.user;
public class Users {
private String users_name;
public String getUsers_name() {
return users_name;
}
public void setUsers_name(String users_name) {
this.users_name = users_name;
}
public String getUsers_password() {
return users_password;
}
public void setUsers_password(String users_password) {
this.users_password = users_password;
}
public Users(String users_name, String users_password) {
this.users_name = users_name;
this.users_password = users_password;
}
private String users_password;
}
控制层
//用实体类来接受
@RequestMapping("/Moldes")
public String Moldes(Users user) {
System.out.println(user.getUsers_name() + ":password:" + user.getUsers_password());
return "target";
}
输出:
123123:password:a12312