Spring MVC请求参数绑定的机制:
Spring MVC绑定请求参数的过程是通过把表单提交请求参数作为控制器中方法参数进行绑定的。
-
绑定基本类型及String类型时,参数名须与控制器中方法形参名一致;
-
绑定Bean对象时,要求表单中参数名称与实体类中属性名称保持一致,且控制器方法参数为Bean;
-
绑定集合类型时有两种方法:(1)要求集合类型请求参数必须在Bean中,表单中请求参数名称要与Bean中集合属性名称相同(给List元素赋值使用下标,给Map元素赋值使用键值对)(2)通过注解实现接收json数据进行转换。
绑定Bean对象代码示例:
实体类Student:
package com.seu.domain;
public class Student {
private int id;
private String name;
private String gender;
private Course course;
public Student() {
}
public Student(int id, String name, String gender, Course course) {
this.id = id;
this.name = name;
this.gender = gender;
this.course = course;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", course=" + course +
'}';
}
}
实体类Course:
package com.seu.domain;
public class Course {
private int cid;
private String cname;
public Course() {
}
public Course(int cid, String cname) {
this.cid = cid;
this.cname = cname;
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
@Override
public String toString() {
return "Course{" +
"cid=" + cid +
", cname='" + cname + '\'' +
'}';
}
}
Controller:
package com.seu.controller;
import com.seu.domain.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/param")
public class paramController {
@RequestMapping(value = "/obtain",method = RequestMethod.POST)
public String getParam(Student student){
System.out.println(student);
return "success";
}
}
前端jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/param/obtain" method="post">
<input type="text" name="id"/>
<input type="text" name="name"/>
<input type="text" name="gender"/>
<input type="text" name="course.cid" />
<input type="text" name="course.cname" />
<input type="submit" value="提交" />
</form>
</body>
</html>
提交后Spring MVC会将请求参数绑定到实体类Student中,Student中的成员类Course也会自动绑定。
绑定集合类型代码实例:
若实体类中含有集合类型:
package com.seu.domain;
import java.util.List;
import java.util.Map;
public class Student {
private int id;
private String name;
private String gender;
private List<Course> courseList;
private Map<String, Course> courseMap;
public Student() {
}
public Student(int id, String name, String gender, List<Course> courseList, Map<String, Course> courseMap) {
this.id = id;
this.name = name;
this.gender = gender;
this.courseList = courseList;
this.courseMap = courseMap;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public List<Course> getCourseList() {
return courseList;
}
public void setCourseList(List<Course> courseList) {
this.courseList = courseList;
}
public Map<String, Course> getCourseMap() {
return courseMap;
}
public void setCourseMap(Map<String, Course> courseMap) {
this.courseMap = courseMap;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", courseList=" + courseList +
", courseMap=" + courseMap +
'}';
}
}
前端表单写法为:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/param/obtain" method="post">
<input type="text" name="id"/>
<input type="text" name="name"/>
<input type="text" name="gender"/>
<hr>
<%--courseList[0].cid和courseList[0].cname表示把cid和cname的值赋给course对象,然后把course对象存到集合的0号位置--%>
<input type="text" name="courseList[0].cid" />
<input type="text" name="courseList[0].cname" />
<hr>
<input type="text" name="courseMap['course1'].cid" />
<input type="text" name="courseMap['course1'].cname" />
<hr>
<input type="submit" value="提交" />
</form>
</body>
</html>