标签:spring mvc 参数绑定
假设我们有一个简单的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
这个绑定和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
也需要使用“辅助类”
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来扩展更多参数绑定方式等
标签:spring mvc 参数绑定
原文地址:http://blog.csdn.net/u012345283/article/details/40322073