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

来源:互联网 发布:js foreach 编辑:程序博客网 时间:2024/05/22 03:41

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

获取servlet内置对象

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

来看SpringMVC中如何获取呢?

定义页面:


访问结果:


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


获取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数据:


结果: