一、最简单的JavaBean的绑定
假设我们有一个简单的Person类
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
那么如何通过请求过来的参数绑定到Person对象上呢?
1、首先我们需要将对象暴露到映射方法的参数中
@RequestMapping("/test1")
public void test1(Person person, HttpServletResponse response)
throws IOException {
System.out.println(Utils.parseJson(person));
sendJson(response, "");
}
注:Utils.parseJson(..)是我封装了一个转化json的方法,只是为了查看输出
还有一点值得注意的是,这个person对象永远都不为null,若无参数为person的属性赋值,那么person就相当于是一个new Person(),所有属性都是默认值
2、再通过类似如下的请求http://localhost:8080/Mobile/test1?name=zhu&age=10就可以将参数绑定到person对象了
二、绑定到简单数组
@RequestMapping("/test1")
public void test1(String[] ids, HttpServletResponse response)
throws IOException {
System.out.println(Utils.parseJson(ids));
sendJson(response, "");
}
注:若参数中没有ids,那么此ids为null,否则默认根据","自动分隔成数组
比如前台发出如下的请求:http://localhost:8080/Mobile//test1?ids=a,b,c
三、绑定到List
这个绑定和80%的最初想法都不太一样,需要通过一个“辅助类”来实现绑定到List,直接在RequestMapping方法参数中使用List无法绑定(就我所知道的)
下面我们来借助Group这个类绑定一组person对象
public class Group {
private List<Person> personList;
public List<Person> getPersonList() {
return personList;
}
public void setPersonList(List<Person> personList) {
this.personList = personList;
}
}
此时需要发出的请求格式为http://localhost:8080/Mobile/test1?personList[0].name=zhu&personList[1].name=zhao
四、绑定到Map
也需要使用“辅助类”
public class Group {
private Map<String, Object> paramMap;
public Map<String, Object> getParamMap() {
return paramMap;
}
public void setParamMap(Map<String, Object> paramMap) {
this.paramMap = paramMap;
}
}
此时需要发出的请求格式为http://localhost:8080/Mobile/test1?paramMap[age]=12¶mMap[name]=zhu
参数需要用paramMap[age]这样的格式,而paramMap.age这样的格式是无法绑定到map的
五、绑定到“富对象”
先解释何谓“富对象”,也就是说对象的属性中还有JavaBean
public class Group {
private Person leader;
private List<Person> members;
public Person getLeader() {
return leader;
}
public void setLeader(Person leader) {
this.leader = leader;
}
public List<Person> getMembers() {
return members;
}
public void setMembers(List<Person> members) {
this.members = members;
}
}
我们已经知道如何绑定到members了,那么绑定到leader也很简单
只需要:http://localhost:8080/Mobile/test1?leader.name=zhu&leader.age=20
这里只简单的介绍了一些常见的绑定的用法,若想要真正掌握其中的原理还需要好好研究~比如BeanWrapper和PropertyEditor
自定义Editor来扩展更多参数绑定方式等