- SpringMVC-处理器方法的参数详解
- 一、直接使用方法的参数逐个接收
- 二、使用对象接收多个参数
- 三、请求参数和方法名称的参数不一致
- 四、使用HttpServletRequest获取参数对象
- 五、直接使用URL地址传参
- 六、获取日期类型的参数
- 七、获取数组类型的参数
- 八、获取集合类型的参数
- 1、List集合
- 2、对象类型的集合
首先,准备好SpringMVC的运行环境,环境搭建参考如下链接:
SpringMVC-环境搭建. 一、直接使用方法的参数逐个接收
package com.dapan.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("param")
public class PramController {
//直接使用方法的参数逐个接收:方法的参数名称必须与用户请求携带的参数名称(前端的name属性)保持一致,否则就会获取不到
//好处:不需要类型的转换,前端只要传的是数字,可以直接用Integer来接收
@RequestMapping("test01.do")
public ModelAndView test01(Integer stuId,String stuName,Integer gender,Integer stuAge) {
System.out.println("test01--------");
System.out.println(stuId);
System.out.println(stuName);
System.out.println(gender);
System.out.println(stuAge);
return new ModelAndView("ok");
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
index
点击登录
----1、直接使用方法的参数逐个接收
ok.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
ok
OK---------------
测试结果
二、使用对象接收多个参数新增Student对象,对象中的属性与前端的name保持一致
public class Student {
private Integer stuId;
private String stuName;
private Integer gender; //0表示男生 1表示女生
private Integer stuAge;
//...省略get/set方法和toString()方法
}
Controller类中新增test02方法
//直接使对象接收多个参数:要求用户请求携带的参数名称(前端的name属性)必须与实体类中的属性保持一致,否则就会获取不到
@RequestMapping("test02.do")
public ModelAndView test02(Student student) {
System.out.println("test02--------");
System.out.println(student);
return new ModelAndView("ok");
}
index.jsp页面新增
----2、直接使用对象接收多个参数
测试结果
三、请求参数和方法名称的参数不一致Controller类中新增test03方法
//请求参数和方法名称的参数不一致
//需要用@RequestParam注解来进行校正,
//如果@RequestParam("")中的参数和请求参数的名称不一致则会抛出400错误
//使用@RequestParam(value="id",required=false) 则不会报错,即使请求参数名称没有和他匹配的,只是将他的值置为空
@RequestMapping("test03.do")
public ModelAndView test03(@RequestParam("stuId") Integer id,
@RequestParam("stuName") String name,
@RequestParam("gender") Integer sex,
@RequestParam("stuAge") Integer age) {
System.out.println("test03--------");
System.out.println(id);
System.out.println(name);
System.out.println(sex);
System.out.println(age);
return new ModelAndView("ok");
}
index.jsp页面新增
----3、请求参数和方法名称的参数不一致
测试结果:
四、使用HttpServletRequest获取参数对象在controller中新增test04方法
@RequestMapping("test04.do")
public ModelAndView test04(HttpServletRequest request ) {
System.out.println("test04--------");
String stuId = request.getParameter("stuId");
String stuName = request.getParameter("stuName");
String gender = request.getParameter("gender");
String stuAge = request.getParameter("stuAge");
System.out.println(stuId==null?"":Integer.parseInt(stuId));
System.out.println(stuName);
System.out.println(gender==null?"":Integer.parseInt(gender));
System.out.println(stuAge==null?"":Integer.parseInt(stuAge));
return new ModelAndView("ok");
}
index.jsp中新增
----4、使用HttpServletRequest获取参数对象
测试结果:
五、直接使用URL地址传参在Controller中新增test05方法
//5、直接使用URL地址传参 例如:http://localhost:8080/param/test05.do/1005/qianerer/0/18
//PathVariable("")中的参数必须与RequestMapping中{}的参数值保持一致
@RequestMapping("test05.do/{id}/{name}/{sex}/{age}")
public ModelAndView test05(@PathVariable("id") Integer stuId,
@PathVariable("name") String stuName,
@PathVariable("sex") Integer gender,
@PathVariable("age") Integer stuAge) {
System.out.println("test01--------");
System.out.println(stuId);
System.out.println(stuName);
System.out.println(gender);
System.out.println(stuAge);
return new ModelAndView("ok");
}
修改web.xml配置文件,将拦截请求由*.do改为 /
测试结果:
六、获取日期类型的参数修改Student实体类,添加Date类型的日期
public class Student {
private Integer stuId;
private String stuName;
private Integer gender; //0表示男生 1表示女生
private Integer stuAge;
//必须在实体类中的Date类型的属性上添加@DateTimeFormat注解才能将前端传递的字符串转为date类型
//不添加会报错
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date registerTime; //新增java.util.Date类型的注册时间
//省略get/set方法 和toString()方法
}
在Controller类中新增test06方法
@RequestMapping("test06.do")
public ModelAndView test06(Student student) {
System.out.println("test06--------");
System.out.println(student);
return new ModelAndView("ok");
}
在index.jsp页面新增
----6、获取日期类型的参数
测试结果:
七、获取数组类型的参数在controller类中添加test07方法
//获取数组类型的参数
@RequestMapping("test07.do")
public ModelAndView test07(String[] stuName,HttpServletRequest request) {
System.out.println("test07--------");
//方式一:
for (String s : stuName) {
System.out.println(s);
}
System.out.println("---------------");
//方式二:
String[] stuNames = request.getParameterValues("stuName");
for (String name : stuNames) {
System.out.println(name);
}
return new ModelAndView("ok");
}
在index.jsp页面新增
----7、获取数组类型的参数
测试结果:
八、获取集合类型的参数 1、List集合在controller中新增
//获取数组类型的参数
//集合类型如果是String/Integer等简单类型的集合,可以直接在前面加@RequestParam注解,注解中的值必须和上传的参数名称保持一致,不加注解则会报错
@RequestMapping("test08.do")
public ModelAndView test08(@RequestParam("stuName") List list) {
System.out.println("test08--------");
for (String name : list) {
System.out.println(name);
}
return new ModelAndView("ok");
}
在index.jsp中新增
----8、获取集合类型的参数
测试结果:
2、对象类型的集合如果是对象类型的集合,则不支持直接获取,必须封装在一个类中,作为一个属性操作
建vo类
需要将对象进行封装
新建vo类
package com.dapan.vo;
import com.dapan.entity.Student;
import java.util.List;
public class QueryVo {
private List studentList; //将集合进行封装,提供get/set方法
public List getStudentList() {
return studentList;
}
public void setStudentList(List studentList) {
this.studentList = studentList;
}
}
在controller中新增
//获取对象类型的集合参数
@RequestMapping("test09.do")
public ModelAndView test09(QueryVo vo) {
System.out.println("test09--------");
for (Student s : vo.getStudentList()) {
System.out.println(s);
}
return new ModelAndView("ok");
}
在Index.jsp中新增
----9、获取集合类型的参数
测试结果:
以上就是我所学习的Controller接收请求参数的全部方法,欢迎各位大佬批评指针。



