源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-12-08 06:55 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:详解Spring Boot Web项目之参数绑定
[b]一、@RequestParam[/b] 这个注解用来绑定单个请求数据,既可以是url中的参数,也可以是表单提交的参数和上传的文件 它有三个属性,value用于设置参数名,defaultValue用于对参数设置默认值,required为true时,如果参数为空,会报错 好,下面展示具体例子: 首先是vm:
<h1>param1:${param1}</h1>
<h1>param2:${param2}</h1>
好吧,就为了展示两个参数 [b]第一种情况:[/b]
  @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¶m2=2 结果: [img]http://files.jb51.net/file_images/article/201703/2017031516174856.png[/img] [b]但是:[/b] 如果不传param2:   http://localhost:8080/hello1.htm?param1=1 直接就报错了 因为无法将null转换为原始类型 [b]所以:建议所有的参数都用包装类型,别用原始类型[/b] [b]第二种情况:[/b] 仍然是上面的那个controller,地址改为 http://localhost:8080/hello1.htm?param2=1¶m1=2 就是让param2=1,param1=2,想试验下,参数绑定是和顺序有关,还是只和参数名称有关,结果: 所以,springMvc参数绑定只和参数名字有关系  [img]http://files.jb51.net/file_images/article/201703/2017031516174857.png[/img] [b]第三种情况:[/b] 如果页面上表单里的参数和代码里的参数名不一样怎么办,这时候就可以用注解了: 
 @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¶m2=2 spring直接报错,必须要这么请求了: http://localhost:8080/hello1.htm?paramTest=1¶m2=2 结果:  [img]http://files.jb51.net/file_images/article/201703/2017031516174858.png[/img]  [b]第四种情况:[/b] 有时候页面上的表单客户不填任何值,但是在控制器里希望它有默认值 可以这样:
  @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 结果: [img]http://files.jb51.net/file_images/article/201703/2017031516174859.png[/img]   但是,如果url中对param1赋值了: http://localhost:8080/hello1.htm?param1=3¶m2=2 结果:  [img]http://files.jb51.net/file_images/article/201703/2017031516174860.png[/img] 也就是说,我们赋的值会修改默认值 [b]第五种情况:[/b] 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),强制必须传参数  [b]二、@PathVariable[/b] 用这个注解可以将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 结果:  [img]http://files.jb51.net/file_images/article/201703/2017031516174861.png[/img] 如果不加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 结果: [img]http://files.jb51.net/file_images/article/201703/2017031516174862.png[/img]   传了空值到页面,无法绑定 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部