首页 > 代码库 > Spring MVC 绑定参数

Spring MVC 绑定参数

一、最简单的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&paramMap[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 绑定参数