对SpringMVC的@RequestParam的解释

 更新时间:2017年09月01日 09:26:51   投稿:jingxian  
下面小编就为大家带来一篇对SpringMVC的@RequestParam的解释。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

自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赋值为null,注意是null而非0,因此参数都最好不要用基础类型。

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

浏览器显示:9

说明浏览器中只要有输入需要的参数即可,而不管是否包含多余的参数,且没有规定顺序。

③在浏览器中输入: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隔开)而不会影响这几个参数名一样的参数值构成“数组”,

相同的参数名的值将会被浏览器变成类似userName="zhang,li,fuck",告诉服务器这是个数组,这里的元素值的顺序则是跟在URL请求中的顺序是对应的。

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

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

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

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

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

以上这篇对SpringMVC的@RequestParam的解释就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 避免Java中的内存泄漏的三种方法

    避免Java中的内存泄漏的三种方法

    在Java开发中,内存泄漏(Memory Leak)是一个常见但令人头疼的问题,本文将深入探讨什么是内存泄漏、常见的泄漏原因、如何识别和避免内存泄漏,以及通过代码示例展示如何优化Java程序以减少内存泄漏的发生,需要的朋友可以参考下
    2024-07-07
  • Java如何在临界区中避免竞态条件

    Java如何在临界区中避免竞态条件

    这篇文章主要介绍了Java如何在临界区中避免竞态条件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 四种引用类型在JAVA Springboot中的使用详解

    四种引用类型在JAVA Springboot中的使用详解

    这篇文章主要介绍了springboot的四种引用类型,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • dubbo入门指南及demo实例详解

    dubbo入门指南及demo实例详解

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,这篇文章主要介绍了dubbo详解及demo实例,需要的朋友可以参考下
    2022-04-04
  • Spring中基于xml的声明式事务示例详解

    Spring中基于xml的声明式事务示例详解

    这篇文章主要介绍了Spring之基于xml的声明式事务,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • JVM内存结构划分实例解析

    JVM内存结构划分实例解析

    这篇文章主要介绍了JVM内存结构划分实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java如何判断一个数是否是素数(质数)

    java如何判断一个数是否是素数(质数)

    这篇文章主要介绍了java如何判断一个数是否是素数(质数),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • SpringBoot项目将mybatis升级为mybatis-plus的方法

    SpringBoot项目将mybatis升级为mybatis-plus的方法

    本文主要介绍了SpringBoot项目将mybatis升级为mybatis-plus的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 使用Java完成Socket文件传输方式

    使用Java完成Socket文件传输方式

    这篇文章主要介绍了使用Java完成Socket文件传输方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java 精炼解读类和对象原理

    Java 精炼解读类和对象原理

    面向对象乃是Java语言的核心,是程序设计的思想。Java语言的面向对象技术包括了面向对象和面向过程的基本概念,面向对象的特征,Java语言的类,对象,修饰符,抽象类等一系列的知识点
    2022-03-03

最新评论