Spring MVC 数据绑定

本文深入探讨SpringMVC框架中的数据绑定技术,包括简单对象、复合对象、集合对象的绑定方式,以及@RequestParam、@PathVariable、@ModelAttribute等注解的使用方法。详细解析了不同数据类型的绑定过程和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重点: 能够熟练使用数据绑定的相关注解

难点: 掌握注解方式的数据绑定

 

什么是数据绑定: 数据绑定就是处理器收集请求参数的方式

 

绑定不同类型的数据

  1. 简单对象
  2. 自定义对象
  3. 复合对象
  4. 集合对象

 

简单对象的绑定

  •   基本类型
  •   包装类型

     相同点:

  1. request.getParameter() 获取
  2. 通过参数进行注入

    区别:

  1. 基本类型不传会报参数不存在的异常
  2. 包装类型不报错,初始值为 null

 

@Controller("simpleController")
@RequestMapping("/simple")
public class SimpleController {
	//基本数据类型绑定
	@RequestMapping("/bindBase1.do")
	public String bindBaseType1(HttpServletRequest request){
		String parameter = request.getParameter("kgc");
		System.out.println("获取到的参数是:"+parameter);
		
		return "success";
	}
	
	@RequestMapping("/bindBase2.do")
	public String bindBaseType2(int age){
		System.out.println("获取到的年龄是:"+age);
		
		return "success";
	}
	
	@RequestMapping("/bindWrap.do")
	public String bindWropType(Integer age){
		System.out.println("获取到的包装类型参数是:"+age);
		
		return "success";
	}
}

复合对象绑定

      通过参数注入方式进行数据绑定

           请求参数与自定义对象写法略有区别

      提供一个符合对象:

       public class ClassModel{

              private Long classId;

              private String className;

              //学生对象

              private StudentModel student;

         }

请求参数: student.studentId=123&student.studentName=kgc

@Controller
@RequestMapping("/complex")
public class ComplexController {
//	绑定方法 访问路径:http://localhost:8080/DataBind/complex/bindComplex.do
//	?classId=10&className=309&student.studentId=15&student.studentName=zhangsan
	@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;

            Setter getter;

       }

请求参数:  student[0].studentId=123&student[0].studentName=kgc

     List的大小是可以弹性增加的

Set 集合

         提供模型对象

         private Set<StudentModel> studentSet;

         public StudentSet() {

             studentSet = new HashSet<StudentModel>();

             studentSet.add(new  StudentModel());

             studentSet.add(new  StudentModel());

          }

请求参数: students[0].studentId=123&students.studentName=kgc

注: 与List 不同,Set 的大小需要在初始化时指定,否则报越界错误

Map

    提供一个模型对象

     public class ClassMap {

            private Map<String,ClassModel> classMap;

     }

请求参数: classMap[x].classId=1&classMap[x].className=%27SpringMVC%27&classMap[x].student.studentId=10&classMap[x].student.studentName=kgc

/**
 * 集合参数绑定的示例
 * @author Administrator
 *
 */
@Controller
@RequestMapping("/collection")
public class CollectionController {
	
	//错误的写法
	@RequestMapping("/bindError.do")
	public String bindError(List<String> testList){
		System.out.println(testList);
		return "success";
	}
	
//	list 参数绑定
	@RequestMapping("/bindList.do")
	public String bindList(StudentList studentList){
		System.out.println(studentList);
		return "success";
	}
	
//	Set 参数绑定
	@RequestMapping("/bindSet.do")
	public String bindSet(StudentSet studentSet){
		System.out.println(studentSet);
		return "success";
	}
	
//	map参数绑定  请求路径: http://localhost:8080/DataBind/collection/bindMap.do
//	?classMap[x].classId=1&classMap[x].className=%27SpringMVC%27&classMap[x].student.studentId=10&classMap[x].student.studentName=kgc
	
	@RequestMapping("bindMap.do")
	public String bindMap(ClassMap classMap){
		System.out.println(classMap);
		return "success";
	}
	
//	数组的参数绑定    请求路径:http://localhost:8080/DataBind/collection/bindArr.do?student
//		真实项目中,一般使用:?studentIds=1,2,3,4,5,6    string split();
	@RequestMapping("/bindArr.do")
	public String bindArr(StudentArray students){
		System.out.println(students);
		return "success";
	}
	
}

数组对象                                                                具体实现  ↑

数组(不常用)

数组作为参数时,需要提供一个绑定类,并且初始化时需要指定数组长度

      -public class StudentArray{

             - private String[] ids = new String[3];

       }

 注:在正式项目中一般不使用数组,通过特殊字符分词的方式更方便。

 

 

数据绑定注解  ·重难点

  ·@RequestParam         绑定单个请求数据

  ·@PathVariable            绑定URL模版变量值

  ·@ModelAttribute        取model中存的值

 

注解的使用

·@RequestParam

完整形式: @RequestParam(value=”参数名”,required=true,defaultValue=”为空时默认值”)

作用: 可以将请求中指定的参数名映射到方法中的参数

注: value 中可为空,为空值参数名和方法中的参数名相同

 ·@PathVariable

完整形式: @PathVariable(value=”参数名”)

作用:  将URL 中占位符所对应变量映射到参数

 比如: @RequestMapping(value=”/detail/{变量}”

注:@PathVariable(value=”参数名”)中value 的值要和占位符/{参数名} 大括号中的值一致

·@ModelAttribute   (不常用,比较鸡肋)

完整形式: @ModelAttribute(value=”参数名”);

作用: 可以加在方法上,表示将方法返回值封装在Model对象当中;

            可以加在方法的参数前,表示将获取到的对象,绑定具体的参数上;

            可以配合表单标签使用,表示在请求中获取参数对象

/**
 * 数据绑定注解示例控制器
 * @author Administrator
 *
 */
@Controller
@RequestMapping("/anotation")
public class AnotationController {
	
//	验证RequestParam 
	@RequestMapping("checkRp.do")
	public String checkRequestP(@RequestParam(value="asd", required=true, defaultValue="课工场")String kgcName){     
		//		注: value 中可为空,为空值参数名和方法中的参数名相同
		System.out.println(kgcName);
		return "success";
	}
	
//	验证PathVarible
	@RequestMapping("checkPvb/{kgcName}")
	public String checkPathVb(
			@PathVariable(value="kgcName")String kgcName){
		System.out.println(kgcName);
		return "success";
	}
	
	@ModelAttribute("dataKey")
	public StudentModel initData(){
		StudentModel student = new  StudentModel();
		student.setStudentId(15);
		student.setStudentName("zhangsan");
		return student;
	}
	
	@RequestMapping("/getData.do")
	public String getModelData(@ModelAttribute("dataKey")StudentModel student){
		System.out.println("model中的参数是"+student);
		return "success";
	}
	
	@RequestMapping("/getFormData.do")
	public String getFormData(@ModelAttribute("class")ClassModel clazz){
		System.out.println("获取的表单对象是"+clazz);
		return "success";
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值