详解Spring Boot Web项目之参数绑定

发布时间 - 2026-01-11 00:11:33    点击率:

一、@RequestParam

这个注解用来绑定单个请求数据,既可以是url中的参数,也可以是表单提交的参数和上传的文件

它有三个属性,value用于设置参数名,defaultValue用于对参数设置默认值,required为true时,如果参数为空,会报错

好,下面展示具体例子:

首先是vm:

<h1>param1:${param1}</h1>
<h1>param2:${param2}</h1>

好吧,就为了展示两个参数

第一种情况:

  @RequestMapping(value = "/hello1.htm")
  public String hello1(ModelMap modelMap,Integer param1, int param2) {
    modelMap.addAttribute("param1", param1);
    modelMap.addAttribute("param2", param2);
    return "hello";
  }

这里前面的参数时包装型,后面的参数时原始类型

直接用url请求:

http://localhost:8080/hello1.htm?param1=1&param2=2

结果:

但是:

如果不传param2:  

http://localhost:8080/hello1.htm?param1=1

直接就报错了

因为无法将null转换为原始类型

所以:建议所有的参数都用包装类型,别用原始类型

第二种情况:

仍然是上面的那个controller,地址改为

http://localhost:8080/hello1.htm?param2=1&param1=2

就是让param2=1,param1=2,想试验下,参数绑定是和顺序有关,还是只和参数名称有关,结果:

所以,springMvc参数绑定只和参数名字有关系

 

第三种情况:

如果页面上表单里的参数和代码里的参数名不一样怎么办,这时候就可以用注解了: 

 @RequestMapping(value = "/hello1.htm")
  public String hello1(ModelMap modelMap, @RequestParam(value = "paramTest") Integer param1, Integer param2) {
    modelMap.addAttribute("param1", param1);
    modelMap.addAttribute("param2", param2);
    return "hello";
  }

在param1前面加上了注解,这时候第一个参数只接受paramTest名字的参数,param1此时无效了。

如果此时我们这么请求:

http://localhost:8080/hello1.htm?param1=1&param2=2

spring直接报错,必须要这么请求了:

http://localhost:8080/hello1.htm?paramTest=1&param2=2

结果:

 

 第四种情况:

有时候页面上的表单客户不填任何值,但是在控制器里希望它有默认值

可以这样:

  @RequestMapping(value = "/hello1.htm")
  public String hello1(ModelMap modelMap, @RequestParam(defaultValue = "5") Integer param1, Integer param2) {
    modelMap.addAttribute("param1", param1);
    modelMap.addAttribute("param2", param2);
    return "hello";
  }

这里用了RequestParam的defaultValue属性,如果url参数中没传param1,也不会报错,使用默认值,比如我们这么请求:

http://localhost:8080/hello1.htm?param2=2

结果:

 

但是,如果url中对param1赋值了:

http://localhost:8080/hello1.htm?param1=3&param2=2

结果:

 

也就是说,我们赋的值会修改默认值

第五种情况:

RequestParam还有个属性:required

意思是必须传值,否则报错,就是这么任性

    @RequestMapping(value = "/hello1.htm")
    public String hello1(ModelMap modelMap, @RequestParam(required = true) Integer param1, Integer param2) {
      modelMap.addAttribute("param1", param1);
      modelMap.addAttribute("param2", param2);
      return "hello";
    }

但是当required=true,和defaultValue= 同时出现时,required失效,可传可不传

简单类型参数绑定小结:

springMVC默认根据参数名字来绑定,而不是参数位置

使用包装类型,否则如果不传值,会报错

使用@RequestParam(value="")来改变参数名字

使用@RequestParam(defaultValue=""),不传参时,使用默认值

使用@RequestParam(required=true),强制必须传参数

 二、@PathVariable

用这个注解可以将URL中的占位符参数绑定到控制器处理方法的入参中,可以这样用:

  @RequestMapping("/hello2.htm/{param1}/{param2}")
  public String hello2(ModelMap modelMap, @PathVariable Integer param1, @PathVariable Integer param2) {
    System.out.println("进入了hello2控制器");
    System.out.println(param1 + "," + param2);
    modelMap.addAttribute("param1", param1);
    modelMap.addAttribute("param2", param2);
    return "hello";
  }

URL:

http://localhost:8080/hello2.htm/1/2

结果:

 

如果不加PathVariable注解,是无法绑定的

  @RequestMapping("/hello2.htm/{param1}/{param2}")
  public String hello2(ModelMap modelMap,Integer param1, @PathVariable Integer param2) {
    System.out.println("进入了hello2控制器");
    System.out.println(param1 + "," + param2);
    modelMap.addAttribute("param1", param1);
    modelMap.addAttribute("param2", param2);
    return "hello";
  }

去掉了第一个参数的注解:

http://localhost:8080/hello2.htm/1/2

结果:

 

传了空值到页面,无法绑定

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # boot  # 参数绑定  # 参数  # 接收参数  # Spring MVC的参数绑定和返回值问题  # 为spring get请求添加自定义的参数处理操作(如下划线转驼峰)  # 基于SpringMVC中的路径参数和URL参数实例  # 绑定  # 报错  # 默认值  # 不传  # 表单  # 第一个  # 这时候  # 也不  # 有个  # 上了  # 可以用  # 错了  # 用了  # 掉了  # 好吧  # 仍然是  # 现时  # 都用  # 既可  # 不加 


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


相关推荐: Laravel如何处理和验证JSON类型的数据库字段  jQuery 常见小例汇总  QQ浏览器网页版登录入口 个人中心在线进入  怎么用AI帮你设计一套个性化的手机App图标?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Android中AutoCompleteTextView自动提示  Laravel如何优化应用性能?(缓存和优化命令)  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Thinkphp 中 distinct 的用法解析  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  如何快速查询网址的建站时间与历史轨迹?  Android自定义控件实现温度旋转按钮效果  如何快速完成中国万网建站详细流程?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  图册素材网站设计制作软件,图册的导出方式有几种?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  如何在企业微信快速生成手机电脑官网?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何用狗爹虚拟主机快速搭建网站?  iOS正则表达式验证手机号、邮箱、身份证号等  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  如何挑选高效建站主机与优质域名?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Laravel如何处理表单验证?(Requests代码示例)  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  javascript基本数据类型及类型检测常用方法小结  深入理解Android中的xmlns:tools属性  北京的网站制作公司有哪些,哪个视频网站最好?  如何用已有域名快速搭建网站?  Python函数文档自动校验_规范解析【教程】  Laravel如何使用Eloquent进行子查询  如何快速打造个性化非模板自助建站?  Laravel如何创建自定义Facades?(详细步骤)  微信小程序 五星评分(包括半颗星评分)实例代码  微信公众帐号开发教程之图文消息全攻略  Laravel怎么调用外部API_Laravel Http Client客户端使用  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何确保西部建站助手FTP传输的安全性?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Swift中switch语句区间和元组模式匹配  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何在阿里云购买域名并搭建网站?  Python文件操作最佳实践_稳定性说明【指导】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解