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来扩展更多参数绑定方式等

时间: 2025-01-13 00:37:23

Spring MVC 绑定参数的相关文章

spring mvc 绑定参数据默认值,是否必传,(RequestParam(value=&quot;id&quot;,defaultValue=&quot;1&quot;,required=true) )

@RequestMapping(value = "/detail", method = RequestMethod.GET) public String newDetail(@RequestParam(value="id",defaultValue="1",required=true) int id,@RequestParam(value="typeId",defaultValue="2",required

spring mvc绑定参数之日期类型转换

问题复现步骤: 1.提交表单,参数为: 2.接收参数类型为product实体类,如下 3.错误日志如下: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errorsField error in object 'product' on field 'departureTime': rejected value [2020-02-10

Spring基础系列14 -- Spring MVC 请求参数的几种获取方法

Spring MVC 请求参数的几种获取方法 转载:http://www.cnblogs.com/leiOOlei/p/3658147.html 一.      通过@PathVariabl获取路径中的参数 @RequestMapping(value="user/{id}/{name}",method=RequestMethod.GET) public String printMessage1(@PathVariable String id,@PathVariable String n

Spring MVC请求参数绑定

所谓请求参数绑定,就是在控制器方法中,将请求参数绑定到方法参数上 @RequestParam 绑定单个请求参数到方法参数上 @RequestParam("id") Integer id 将请求参数名为id的变量,绑定到id参数上,如果不知道@RequestParam值,默认从请求参数中取和变量名相同的请求参数 @RequestParam(value = "id",required = false) Integer id 可以通过指定required参数来指定是否必须

Spring MVC处理参数Convert

Springmvc.xml 配置convert,xml中配置多个相同的泛型时,xml里配置的convert会从上到下挨个执行. <!-- 配置注解驱动,并配置convert --> <mvc:annotation-driven conversion-service="myConversionService"/> <!-- 配置多个convert --> <bean id="myConversionService" class

spring mvc绑定对象String转Date解决入参不能是Date的问题

使用spring的mvc,直接将页面参数绑定到对象中,对象中有属性为Date时会报错,此时需要处理下. 同样的,其他的需要处理的类型也可以用这种方法. 在controller中加入代码 @InitBinder protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { //对于需要转换为Date类型的属性,使用DateEditor进行处理 bin

spring mvc绑定对象String转Date(來自http://blog.csdn.net/whumr1/article/details/8056285)

使用spring的mvc,直接将页面参数绑定到对象中,对象中有属性为Date时会报错,此时需要处理下. 同样的,其他的需要处理的类型也可以用这种方法.(其他类型沒有時間研究,歡迎技術牛人補充) 1.在controller中加入代码 @InitBinderprotected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { //对于需要转换为Date类型的属

Spring MVC redirect参数

不同的Controller之间使用redirect的话,会把上一个controller的mapping以及参数附加在目标controller的对应的URL后面当成参数,这样子看起来很不爽:.../success/?param1=xxx&param2=xxx. 经过发现,对于Spring 3.1: <mvc:annotation-driven ignoreDefaultModelOnRedirect="true" /> 对于For Spring >= 4.0 u

Spring MVC接受参数的注解

一.Request请求发出后,Headler Method是如何接收处理数据的? Headler Method绑定常用的参数注解,根据处理request的不同部分分为四类: A.处理 Request URI 部分:@PathVariable [指的是URI的Template中的Variable,不包含Query String部分] B.处理 Reauest Header 部分:@RequestHeader.@CookieValue C.处理 Request Body 部分:@RequestPar