第一种:
原生request接收(一般不使用)
@RequestMapping("/test1.action")
public ModelAndView test1(HttpServletRequest request) {
//通过传统的方式接收参数,request.getparameter()来接收参数
String name = request.getParameter("name");
System.out.println(name);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name","dage");
modelAndView.setViewName("/resoult.jsp");
return modelAndView;
}
第二种:
直接在处理器方法形参处设置和请求参数名字相同的形参即可自动接收
@RequestMapping("/test2.action")
public String test2(String name) { //这里的形参和前端请求的参数名要保持一致
System.out.println(name);
return "/resoult.jsp";
}
第三种:
参出名没有保持一致的情况下利用处理器方法的形参接收参数
@RequestMapping("/test2.action")
//如果参数名字和请求的参数名不一样,需要加上@RequestParam(value = "name")这个注解
//required = false是可选项参数,表示这个参数是否为必须要传的参数,如果必要要传却没传是不行的,默认是必须要传的
//defaultValue是可选项,表示这个参数的默认值是多少,如果没传,就采用默认值
public String test2(@RequestParam(value = "name",required = false,defaultValue = "hello") String myname) {
System.out.println(myname);
return "/resoult.jsp";
}
第四种 :
将参数封装成对象
第一步:建立一个domain类
@Getter@Setter
public class User {
private String user_name;
private String user_age;
@Override
public String toString() {
return "User{" +
"user_name='" + user_name + '\'' +
", user_age='" + user_age + '\'' +
'}';
}
}
第二步:在控制器中接收参数并封装成对象,形参直接写为你想要封装成的目标对象,前提是请求的参数名必须和domain类的字段属性名保持一致,不然无法进行封装
@RequestMapping("/myform.action")
public String test3(User user) {
System.out.println(user);
return "/resoult.jsp";
}
第五种:
使用数组来接收
第一步:前端表单使用的name属性的值必须一致
<form action="${pageContext.request.contextPath}/myform.action">
姓名:<input type="text" name="name">
年龄:<input type="text" name="name">
<input type="submit" value="提交">
</form>
第二步:控制器中形参以数组的形式接收
@RequestMapping("/myform.action")
public String test3(String[] name) {
System.out.println(Arrays.toString(name));
return "/resoult.jsp";
}
第六种
数组接收并作为属性封装到对象中
第一步:
<form action="${pageContext.request.contextPath}/myform.action" method="post">
姓名:<input type="text" name="user_name">
年龄:<input type="text" name="user_age">
爱好:<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="篮球">篮球
<input type="checkbox" name="hobby" value="网球">网球
<input type="checkbox" name="hobby" value="兵乓球">乒乓球
<input type="submit" value="提交">
</form>
第二步:
@Getter@Setter
public class User {
private String user_name;
private String user_age;
private String hobby[];
@Override
public String toString() {
return "User{" +
"user_name='" + user_name + '\'' +
", user_age='" + user_age + '\'' +
", hobby=" + Arrays.toString(hobby) +
'}';
}
}
第三 步:仍然在形参中以对象形式接收
@RequestMapping("/myform.action")
public String test3(User user) {
System.out.println(user);
return "/resoult.jsp";
}
第七种:
对象中的属性是另一个对象(也就是属性为包装类型)
第一步:比如这里用户有一条狗,那么直接在name属性中点狗的属性即可
<form action="${pageContext.request.contextPath}/myform.action" method="get">
姓名:<input type="text" name="user_name">
年龄:<input type="text" name="user_age">
爱好:<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="篮球">篮球
<input type="checkbox" name="hobby" value="网球">网球
<input type="checkbox" name="hobby" value="兵乓球">乒乓球
宠物名字
<input type="text" name="dog.name">
宠物颜色
<input type="text" name="dog.color">
<input type="submit" value="提交">
</form>
第二步:这里用户的狗是一个包装类型也就是另一个对象
@Getter@Setter
public class User {
private String user_name;
private String user_age;
private String hobby[];
private Dog dog;
@Override
public String toString() {
return "User{" +
"user_name='" + user_name + '\'' +
", user_age='" + user_age + '\'' +
", hobby=" + Arrays.toString(hobby) +
", dog=" + dog +
'}';
}
}
第三步:控制器中形参仍然以要封装的对象来接收
@RequestMapping("/myform.action")
public String test3(User user) {
System.out.println(user);
return "/resoult.jsp";
}
第八种:
使用list集合接收参数
第一步:现在有多条狗,这里用list集合作为参数类型
@Getter@Setter
public class User {
private String user_name;
private String user_age;
private String hobby[];
private List<Dog> dogs;
@Override
public String toString() {
return "User{" +
"user_name='" + user_name + '\'' +
", user_age='" + user_age + '\'' +
", hobby=" + Arrays.toString(hobby) +
", dogs=" + dogs +
'}';
}
}
第二步:前端表单中使用数组下标的形式表明这是集合中第几个对象
<form action="${pageContext.request.contextPath}/myform.action" method="get">
姓名:<input type="text" name="user_name">
年龄:<input type="text" name="user_age">
爱好:<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="篮球">篮球
<input type="checkbox" name="hobby" value="网球">网球
<input type="checkbox" name="hobby" value="兵乓球">乒乓球
宠物1名字
<input type="text" name="dogs[0].name">
宠物1颜色
<input type="text" name="dogs[0].color">
宠物2名字
<input type="text" name="dogs[1].name">
宠物2颜色
<input type="text" name="dogs[1].color">
<input type="submit" value="提交">
</form>
第三步:控制器中仍然使用对象类型接收参数
@RequestMapping("/myform.action")
public String test3(User user) {
System.out.println(user);
return "/resoult.jsp";
}