SpringMVC源码(十一)请求参数绑定和获取

 获取页面请求的参数,是JavaWEB必不可少的一个环节,在Struts中,是通过在Action中定义属性,或者Model的方式来进行数据绑定和获取。需要提供setter或getter方法,略显麻烦。而在SpringMVC中,却可以非常方便的获取请求参数,只需要在对应方法的参数列表中定义出来,即可获取,所见即所得!

获取servlet内置对象

在Struts中是通过特点API获取,或者是接口注入的方式。

来看SpringMVC中如何获取呢?

定义页面:


访问结果:


获取Servlet内置对象的这种方式我们不推荐使用。因为SpringMVC有更好的方式来获取请求参数。

扫描二维码关注公众号,回复: 1826945 查看本文章


获取PathVariable参数



注意:参数类型必须匹配,否则会出错


获取基本数据类型请求参数

在SpringMVC中,要获取表单中的各种数据,可以通过@RequestParam注解的方式

例如,有一个页面:

<formaction="/test/show14.do"method="post">
		<table>
			<tr>
				<td>姓名:</td>
				<td><inputname="name"value="liuyan"/></td>
			</tr>
			<tr>
				<td>年龄:</td>
				<td><inputname="age"value="20"/></td>
			</tr>
			<tr>
				<td>收入:</td>
				<td><inputname="income"value="100000"/></td>
			</tr>
			<tr>
				<td>结婚:</td>
				<td><inputtype="radio"name="isMarried"value="true"
					checked="checked"/>是<inputtype="radio"name="isMarried"
					value="false"/>否</td>
			</tr>
			<tr>
				<td>兴趣:</td>
				<td><inputtype="checkbox"name="interests"value="shopping"
					checked="checked"/>购物<inputtype="checkbox"name="interests"
					value="sport"checked="checked"/>运动<inputtype="checkbox"
					name="interests"value="movie"checked="checked"/>看电影</td>
			</tr>
			<tr>
				<tdcolspan="2"><inputtype="submit"value="提交表单"/></td>
			</tr>
		</table>
	</form>

提交的数据包含了各种基本数据类型,我们可以这样接收:


注意:类似interests这种多个值的数据,可以用数组或者是List来接收都行

访问表单页面:


提交表单:


RequestParam的更多用法

1)默认情况:


因为默认required为true,所以访问时,如果没有name参数肯定报错:


2)设置required为false,并且给定一个默认值


访问时没有传递参数,但是没有报错,并且得到了默认值:二狗


获取请求参数并封装为POJO对象

我们发现一个一个获取参数非常麻烦,能不能直接把整个表单中的数据封装为对象呢?

定义Controller,只需要在参数中写上要封装的对象即可:

提交表单,访问:



获取cookie值

传统的Servlet获取Cookie的方式非常的麻烦,需要用到request,然后获取cookie数组。逐个遍历

SpringMVC中依然是通过注解加参数注入的方式:


访问:

接收对象List集合

表单中,还有这样一种写法:


上面的表单相当于同时提交三个用户,也就是用户的集合。要注意的是,我们在Controller中,不能直接接收一个User的List集合


\

正确的方式是,定义一个对象,在对象中定义一个List<User>的属性:


然后在Controller中接收这个对象,而不是Use集合


最后访问:


接收JSON格式请求

SpringMVC还可以接收JSON数据,并且把JSON字符串转为POJO对象

这个时候,就要用到@RequestBody注解。

所以:

    @ResponseBody 是把返回值的Pojo对象变为JSON字符串,称为序列化

    @RequestBody  是把接收到的JSON字符串变为Pojo对象,称为反序列化

接收单个User对象

定义Controller:接收一个User对象


使用RestClient来模拟发送JSON数据:


结果:


接收JSON的数组

定义Controller,可以直接接收List<User>


模拟发送JSON数据:


结果:


猜你喜欢

转载自blog.csdn.net/superpojo/article/details/75006547