全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

一、@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参数实例  # 绑定  # 报错  # 默认值  # 不传  # 表单  # 第一个  # 这时候  # 也不  # 有个  # 上了  # 可以用  # 错了  # 用了  # 掉了  # 好吧  # 仍然是  # 现时  # 都用  # 既可  # 不加 


相关文章: 如何通过VPS建站实现广告与增值服务盈利?  Swift中switch语句区间和元组模式匹配  建站主机选择指南:服务器配置与SEO优化实战技巧  阿里云网站制作公司,阿里云快速搭建网站好用吗?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  平台云上自助建站如何快速打造专业网站?  Bpmn 2.0的XML文件怎么画流程图  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  如何在西部数码注册域名并快速搭建网站?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  Python lxml的etree和ElementTree有什么区别  建站主机选虚拟主机还是云服务器更好?  建站之星伪静态规则如何设置?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  微信h5制作网站有哪些,免费微信H5页面制作工具?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  网站制作免费,什么网站能看正片电影?  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何设置并定期更换建站之星安全管理员密码?  潮流网站制作头像软件下载,适合母子的网名有哪些?  定制建站是什么?如何实现个性化需求?  c# await 一个已经完成的Task会发生什么  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  制作门户网站的参考文献在哪,小说网站怎么建立?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  如何批量查询域名的建站时间记录?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何用PHP快速搭建高效网站?分步指南  动图在线制作网站有哪些,滑动动图图集怎么做?  建站之星logo尺寸如何设置最合适?  如何在万网主机上快速搭建网站?  专业网站建设制作报价,网页设计制作要考什么证?  如何通过西部建站助手安装IIS服务器?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  在线教育网站制作平台,山西立德教育官网?  html制作网站的步骤有哪些,iapp如何添加网页?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  建站之星如何助力企业快速打造五合一网站?  建站之星安装路径如何正确选择及配置?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  香港服务器WordPress建站指南:SEO优化与高效部署策略  山东网站制作公司有哪些,山东大源集团官网?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。