对SpringMVC的@RequestParam的解释

发布时间 - 2026-01-11 03:03:43    点击率:

自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的解释就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# SpringMVC  # @RequestParam  # SpringMVC自定义参数绑定实现详解  # 浅谈@RequestParam 参数是否必须传的问题  # @RequestParam使用defaultValue属性设置默认值的操作  # SpringMVC注解@RequestParam方法原理解析  # 使用@RequestParam 绑定List参数  # 器中  # 则是  # 给大家  # 而非  # 的是  # 客户端  # 这是  # 我在  # 出了  # 第一个  # 才是  # 将会  # 就不  # 是指  # 可以用  # 说到  # 有多  # 就没  # 用了  # 希望能 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何在宝塔面板中创建新站点?  Python并发异常传播_错误处理解析【教程】  如何彻底卸载建站之星软件?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何撰写建站申请书?关键要点有哪些?  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  C#如何调用原生C++ COM对象详解  如何在万网利用已有域名快速建站?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  详解jQuery中的事件  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  如何在局域网内绑定自建网站域名?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  如何快速上传建站程序避免常见错误?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  phpredis提高消息队列的实时性方法(推荐)  大型企业网站制作流程,做网站需要注册公司吗?  Laravel如何实现用户密码重置功能?(完整流程代码)  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  如何基于PHP生成高效IDC网络公司建站源码?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Python面向对象测试方法_mock解析【教程】  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在IIS中配置站点IP、端口及主机头?  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel如何处理文件下载请求?(Response示例)  如何在万网ECS上快速搭建专属网站?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  详解Android——蓝牙技术 带你实现终端间数据传输  微信小程序 HTTPS报错整理常见问题及解决方案  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  油猴 教程,油猴搜脚本为什么会网页无法显示?  青岛网站建设如何选择本地服务器?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  Android利用动画实现背景逐渐变暗  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  如何快速登录WAP自助建站平台?  如何用wdcp快速搭建高效网站?  Laravel如何发送系统通知?(Notification渠道示例)  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】