概念
数据绑定就是将请求中的参数接收到处理器即控制器中。
不同类型的数据绑定
- 简单对象
- 自定义对象
- 复合对象
- 集合对象
简单的对象绑定
- 基本类型
- 包装类型
简单对象绑定代码示例
@Controller("simpleController")
@RequestMapping("/simple")
public class SimpleController {
//基本类型绑定
@RequestMapping("/bindBase.do")
public String bindBaseType(HttpServletRequest request){
String parameter = request.getParameter("kgc");
System.out.println("获取到的参数是"+parameter);
return "success";
}
@RequestMapping("/bindBase1.do")
public String bindBaseType1(int age){
System.out.println("获取到的年龄是"+age);
return "success";
}
@RequestMapping("/bindWrap.do")
public String bindWrap(Integer age){
System.out.println("获取到的包装类型参数"+age);
return "success";
}
}
自定义对象绑定
通过参数注入方式实现数据绑定,按属性名绑定 1.提供自定义对象
/**
* 学生的数据模型
*
*/
public class StudentModel {
//学生ID
private int studentId;
//学生姓名
private String studentName;
@Override
public String toString() {
return "StudentModel [studentId=" + studentId + ", studentName="
+ studentName + "]";
}
//getter、setter方法省略。。。
}
2.提供处理方法
/**
* 自定义对象绑定示例控制器
*
*/
@Controller
@RequestMapping("/custorm")
public class CustormController {
//提供绑定方法
//访问路径:http://localhost:8080/DataBind//custorm/bindCustorm.do?studentId=123&studentName=%27xiaoming%27
@RequestMapping("/bindCustorm.do")
public String bindCustorm(StudentModel student){
System.out.println(student);
return "success";
}
}
复合对象绑定
通过参数注入方式进行数据绑定
- 请求参数与自定义对象写法略有区别
- 提供一个复合对象,即有属性是类的对象类型的
复合对象绑定代码示例
public vlass ClassModel{
private Long classId;
private String className; //学生对象
private StudentModel studet;
}
参数就变成了:student.studentId=123&student.studentName=’xxx’
/**
* 班级的数据模型
*
*/
public class ClassModel {
//班级ID
private Integer classId;
//班级名称
private String className;
//学生对象
private StudentModel student;
@Override
public String toString() {
return "ClassModel [classId=" + classId + ", className=" + className
+ ", student=" + student + "]";
}
//getter、setter方法省略。。。
/**
* 复合对象的绑定示例控制器
* @author luojin
*
*/
@Controller
@RequestMapping("/complex")
public class ComplexController {
//绑定方法
//请求路径:http://localhost:8080/DataBind//complex/bindComplex.do?classId=123&className=%27kgc%27&student.studentId=456&student.studentName=%27zhangsan%27
@RequestMapping("/bindComplex.do")
public String bindComplex(ClassModel clazz){
System.out.println("获取到的参数:"+clazz);
return "success";
}
}
集合对象绑定
- List集合
- Set集合
- Map集合
- 数组对象绑定
集合参数绑定:提供一个数据对象来进行参数收集,否则不生效
集合对象绑定代码示例
/**
* 学生的list集合模型
*
*/
public class StudentList {
//学生集合
private List<StudentModel> students;
@Override
public String toString() {
return "StudentList [students=" + students + "]";
}
public List<StudentModel> getStudents() {
return students;
}
public void setStudents(List<StudentModel> students) {
this.students = students;
}
}
/**
* 学生set模型
*
*/
public class StudentSet {
private Set<StudentModel> studentSet;
public StudentSet() {
studentSet=new HashSet<StudentModel>();
studentSet.add(new StudentModel());
studentSet.add(new StudentModel());
}
@Override
public String toString() {
return "StudentSet [studentSet=" + studentSet + "]";
}
public Set<StudentModel> getStudentSet() {
return studentSet;
}
public void setStudentSet(Set<StudentModel> studentSet) {
this.studentSet = studentSet;
}
}
/**
* 班级的map模型
*
*/
public class ClassMap {
private Map<String,ClassModel> classMap;
@Override
public String toString() {
return "ClassMap [classMap=" + classMap + "]";
}
public Map<String, ClassModel> getClassMap() {
return classMap;
}
public void setClassMap(Map<String, ClassModel> classMap) {
this.classMap = classMap;
}
}
/**
* 学生的数组模型
*
*/
public class StudentArray {
private String[] studentIds=new String[3];
@Override
public String toString() {
return "StudentArray [studentIds=" + Arrays.toString(studentIds) + "]";
}
//getter、setter方法省略
}
/**
* 集合参数绑定的示例
*
*/
@Controller
@RequestMapping("/collection")
public class CollectionController {
//错误的写法!
@RequestMapping("/bindError.do")
public String bindError(List<String> testList){
System.out.println(testList);
return "success";
}
//list 参数绑定
//http://localhost:8080/DataBind//collection/bindList.do?students[0].studentId=110&students[3].studentName=%27kgc%27
@RequestMapping("/bindList.do")
public String bindList(StudentList studentList){
System.out.println(studentList);
return"success";
}
//set参数绑定
//请求路径:http://localhost:8080/DataBind//collection/bindSet.do?studentSet[0].studentId=110&studentSet[1].studentName=%27kgc%27
@RequestMapping("/bindSet.do")
public String bindSet(StudentSet studentSet){
System.out.println(studentSet);
return"success";
}
//map参数绑定 classMap.get(key)
//%27相当于get请求当中的引号"" ''
//请求路径:http://localhost:8080/DataBind//collection/bindMap.do?classMap[x].classId=101&classMap[x].className=%27springMVC%27&classMap[x].student.studentId=123&classMap[x].student.studentName=%27xiaoming%27
@RequestMapping("/bindMap.do")
public String bindMap(ClassMap classMap){
System.out.println(classMap);
return"success";
}
//数组的参数绑定
//请求路径:http://localhost:8080/DataBind//collection//bindArr.do?studentIds[0]=1&studentIds[1]=2&studentIds[2]=3
//真实项目当中,一般使用:?studentIds=1,2,3,4,5,6 String split();
@RequestMapping("/bindArr.do")
public String bindArr(StudentArray students){
System.out.println(students);
return"success";
}
}
数据绑定的注解
- @RequestParam:绑定单个请求数据(最常用)
- @PathVariable:绑定 URL 模板变量值
- @ModelAttribute:取 model 中存的值
@RequestParam
完整形式:
@RequestParam(value=”参数名“,required=true,defaultValue=”为空时默认值”) (value 可省略)作用:可以将请求中指定的参数名映射到方法中的参数
扫描二维码关注公众号,回复: 43115 查看本文章
@PathVariable
完整形式:
@PathVariable(value=”参数名”)作用:将URL中占位符中所对应变量映射到参数
@ModelAttribute
完整形式:
@ModelAttribute(value=”参数名”)作用:可以加在方法上,表示将方法返回值封装在Model对象当中;可以加载方法的参数前,表示将获 取到的对象,绑定到具体的参数上;可以配合表单标签使用,表示在请求中获取参数对象