自SpringMVC4.2之后,RequestParam内部有4个参数:

1、String name

2、String value

3、boolean required

4、String defaultValue

其中name和value分别是对方的别名,即二者没区别,我个人比较喜欢用name,因为它的某些特性使得name这个名字更直观,下面会说到。

先看第一个映射方法的定义:

@RequestMapping("/paramTest0")
public @ResponseBody String paramTest(Long id){
String result = "";
result += id;
return result;
}

①然后我在浏览器地址栏上输入:http://localhost:8080/test/hello/paramTest0

浏览器显示:null

这里引申出了SpringMVC的一个特性,即当浏览器中没有输入相应参数和值,那么SpringMVC不会给id赋值即id值是默认值null,因此参数都最好不要用基础类型。

②在浏览器中输入:http://localhost:8080/test/hello/paramTest0?userName=zhang&userName=li&id=9&userName=shit

浏览器显示:9

说明浏览器中只要有输入需要的参数即可,而不管是否包含多余的参数,且没有规定顺序(因为后台是可以根据key来获取值的,而如果是通过QueryString则顺序也不影响解析参数)。

③在浏览器中输入:http://localhost:8080/test/hello/paramTest0?id=6

显示为:6

这个就不解释了。

#########################################分隔符##################################################

再看第二个映射方法的定义:

    @RequestMapping("/paramTest")
public @ResponseBody String paramTest(@RequestParam(name="userName", required = false) String[] userNames, Long id){
String result = "";
if(userNames != null){
for(int i=0;i<userNames.length;i++){
result += userNames[i] + "#";
}
}
result += id;
return result;
}

①然后在浏览器输入:http://localhost:8080/test/hello/paramTest?userName=zhang&userName=li&id=5&userName=fuck

显示为:zhang#li#fuck#5

由此引申出:首先URL请求的参数部分可以有多对参数的参数名一样,如上面的userName,且它们中间可以用其它参数隔开(上面用了id=5隔开)而不会影响这几个参数名一样的参数值构成“数组”(对于浏览器而言它只是URL中的字符串而已是否重复没半毛钱关系,Tomcat也不会主动将它拼成数组),

相同的参数名的值会被SpringMVC通过request.getQueryString()方法获取完整的参数然后再将相同key的Entry转换成数组(应该是SpringMVC判断参数里有数组就不用getParameter方法而用getQueryString方法获取参数),这里的元素值的顺序则是跟在URL请求中的顺序是对应的

然后看我们方法参数里的是userNames而非userName,但是仍然显示正确,这是因为RequestParam的name或value属性的值userName才是和

浏览器那边传过来的参数名对应(个人认为这是name比value更直观一点的原因),而它注解的参数userNames就是

此注解"userName"要“赋值”的变量(或说SpringMVC因为有RequestParam而做了个参数映射将客户端请求中的参数值映射到相应方法的参数上,即userNames)。

还要注意,一个@RequestParam只能注解一个参数,即后面的Long id上是没有该注解的。

RequestParam中的required是指这个参数是否客户端必须提供,defaultValue则是如果没有提供该参数默认值是什么(故required=true, defaultValue="xxx"就没意义了)。

SpringMVC的@RequestParam的解释的更多相关文章

  1. SpringMVC的注解关键词解释

    SpringMVC的注解关键词解释 @Controller控制器定义 和Struts1一样,Spring的Controller是Singleton的.这就意味着会被多个请求线程共享.因此,我们将控制器 ...

  2. springMVC中@RequestParam和@RequestBody注解的用法

    springMVC中@RequestParam注解用在Controller层获解析.提取参数,当然你也可以用request.getParameter("name")来获取参数,而@ ...

  3. SpringMVC注解@RequestParam全面解析---打酱油的日子

    在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取.这里主要 ...

  4. SpringMVC注解@RequestParam全面解析

    在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取.这里主要 ...

  5. SpringMVC注解@RequestParam(转)

    鸣谢:http://shawnccx.iteye.com/blog/730239 -------------------------------------------------- 在SpringM ...

  6. springMVC中@RequestParam和@RequestBody的作用

    @RequestParam和@RequestBody是什么区别,估计很多人还是不太清楚, 因为一般用@ RequestParam就足够传入参数了,要说他们区别,就需要知道contentType是什么? ...

  7. SpringMVC注解@RequestParam与RequestMapping全面解析

    1.@RequestParam用法: SpringMVC后台控制层获取参数的方式主要有两种, 一种是request.getParameter("name"), 另外一种是用注解@R ...

  8. SpringMVC学习 -- @RequestParam , @RequestHeader , @CookieValue 的使用

    使用 @RequestParam 绑定请求参数值: value:参数名 , 仅有一个 value 属性时 , value 可以省略不写. required:是否必须.默认为 true , 表示请求参数 ...

  9. Springmvc中@RequestParam传值中文乱码解决方案

    首先jsp表单里面有一些参数要传到controller中,通过以下方法接收: @RequestMapping(value="/orderPaper") public ModelAn ...

随机推荐

  1. Java使用拦截器的两种方式

    拦截器是个好东西,之前用到过,现在记录一下,供以后参考使用! 其一,使用org.aspectj.lang.annotation.Aspect 先上代码: package com.test.interc ...

  2. hashcode-equals方法

    package com.charles.collection; import java.util.HashSet; import java.util.Set; public class Point { ...

  3. 实验楼 1. k-近邻算法实现手写数字识别系统--《机器学习实战 》

    首先看看一些关键词:K-NN算法,训练集,测试集,特征(空间),标签 举实验楼中的样例,通俗的讲讲K-NN算法:电影有两个分类(标签)-动作片-爱情片.两个特征--打斗场面--亲吻画面. 将那些数字和 ...

  4. Spring源码情操陶冶-AbstractApplicationContext#onRefresh

    承接前文Spring源码情操陶冶-AbstractApplicationContext#initApplicationEventMulticaster 约定web.xml配置的contextClass ...

  5. nopCommerce 3.9 大波浪系列 之 开发支持多店的插件

    一.基础介绍 nop支持多店及多语言,本篇结合NivoSlider插件介绍下如何开发支持多商城的小部件. 主要接口如下: ISettingService 接口:设置接口,可实现多店配置. (点击接口介 ...

  6. MAC上安装EndNote破解版的链接文件 以及某些安装好后有可能替换执照文件的方法

    一款非常好用的论文写作软件不多形容,开整: X7 mac版本(非免破解版本)链接: 点击我 X8 mac版本(大客户版本,免破解非常好用) 点击我 X8 windows版本(大客户版本,免破解非常好用 ...

  7. 11.2.0.4 RAC 手动打补丁

    1. 下载补丁和最新OPatchGI PSU : p25869727_112040_Linux-x86-64.zipOPatch : p6880880_112000_Linux-x86-64.zip ...

  8. [补档][HNOI 2008]GT考试

    [HNOI 2008]GT考试 题目 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2... ...

  9. hdu 6093---Rikka with Number(计数)

    题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...

  10. Cocoapods 应用第一部分 - Xcode 创建 .framework 相关

    问题的提出: 随着项目的越来越大,可能会出现好几个团队共同维护一个项目的情况,例如:项目组A负责其中的A块,项目组B负责其中的B块.....这几块彼此之间既独立,也相互联系.对于这种情况,可以采用约定 ...