所谓参数绑定就是将请求传过来的参数进行相关的处理,这是前后端进行数据交互很重要的一部分。
# # 首先是简单的参数传递
比方说我发这这样的请求:http://localhost:8080/user/paramTest?username=zhangshan&password=123456
可以看到的是我传了两个参数,分别是username和password,如果我的controller想要获取参数只需要:
这样只能满足接受零散的请求参数,一个两个都ok,但是我们知道参数列表是要尽量少的。
# # 复杂的参数传递
比方说是提交一个表单,我们肯定不会一个参数一个参数的传递的,这显然很麻烦,我们一般采用将数据封装到一个 javaBean中去的方式。
来个demo
只需要提供一个实体类,然后属性和我们要提交的参数对应起来,才处理的controller上,框架就会帮我们自动的封装到实体类中去。同时这个实体类,还可以有引用类型的属性
public class Account implements Serializable {
private String username;
private String password;
private double money;
//一个引用类型的属性
private Student student;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
", student=" + student +
'}';
}
}
前端页面:
Hello World!
用户名:
密码:
缴费:
学生姓名:
学会年龄:
这里就应该注意一下了,input框的name属性的值都是我们定义好的实体类的属性的值,名字对应起来。实体类提供set get 方法,就能够将前端页面行的数据存储在对象里边,传递到后台,即使是引用类型,就像student.age,这样对应起来,依然能够传递。
最后后端想要将数据取出来,也很简单,只需要传参数传入一个实体类对象就可以了:
@RequestMapping("paramTest")
public String paramTest(Account account){
System.out.println(account.getUsername());
System.out.println(account.getPassword());
System.out.println(account.getMoney());
System.out.println(account.getStudent().getName());
System.out.println(account.getStudent().getAge());
return "success";
}
# # 这里有一个神奇的情况, 就是前端向后台提交数据的时候,框架会给我们自动类型转换,比方说是自动将 字符串类型给我们装转成了Integer类型的。 这是框架自定义好的类型转换器。我们用起来,基本上不用自己再写,但是肯定会会有自动转换不了 的情况,这就需要我们自定义类型转换器了。
自定义的类型转化器如下:
package com.angus.utils;
import org.springframework.core.convert.converter.Converter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDateConverter implements Converter {
public Date convert(String source) {
if (source == null) {
throw new RuntimeException("请传入非空的参数");
}
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
return dateFormat.parse(source);
} catch (Exception e) {
throw new RuntimeException("转换出错");
}
}
}
这就相当于是自己定义了一个组件,那想要它生效,就要自己去配置它:这个如果整合SSM就放在applicationContext.xml中
如果只是使用spring 的话,就放在springMVC的配置文件中去。