SpringBoot从0到实战9:学习@RequestParam和@PathVariable

正确理解“访问请求”、“URI”、“URL”、“请求参数”的概念

  • 一个完整的请求路径:http://www.test.com/user/0866/viewusername=zhangsan&age=21

  • 请求URL (requestURL)=

  • http://www.test.com/user/031267/view

  • 请求URI (requestURI)= user/031267/view

  • 请求参数(queryString)= username=zhangsan&age=20

  • 上述中,URI为统一资源标识符Uniform Resource
    Identifer,是一个用于表示某一互联网资源名称的字符串,Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 -由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。

@RequestParam注解和@PathVariable注解的区别

  • 从字面上可以看出@RequestParam是获取请求里边携带的参数;
  • @PathVariable翻译过来就是路径变量,是获取请求路径里边的变量参数。
  • 例:127.0.0.1/user/{userId}userName=zhangshan,userId是路径上的变量,userName才是请求参数信息

@RequestParam注解

  • @RequestParam有三个参数:
  • value:参数名;
  • required:是否必需,默认为true,表示请求参数中必须包含该参数,如果不包含抛出异常。
  • defaultValue:默认参数值,如果设置了该值自动将required设置为false,如果参数中没有包含该参数则使用默认值。
  • 示例:@RequestParam(value = “userId”, required = false, defaultValue = “1”)

@PathVariable注解

  • 当使用@RequestMapping URI占位符映射时,Url中可以通过一个或多个{xxxx}占位符映射,通过@PathVariable可以绑定占位符参数到方法参数中。
  • 例如:@PathVariable(“userId”) Long userId,@PathVariable(“userName”)
    String userName (注:Long类型可以根据需求自己改变String或int,spring会自动做转换)
  • @RequestMapping(“/user/{userId}/{userName}/query")
  • 请求URL:http://localhost/user/8/张山/query
  • /Springmvc/user/page.do?pageSize=3&pageNow=2
    pageSize和pageNow应该属于参数而不是路径,所以此处应该使用@RequestParam的注解

@PathVariable 映射 URL 绑定的占位符

  • @PathVariable 可以将 URL 中 占位符参数 绑定到控制器处理 方法的入参 中:URL 中的 { xxx }
    占位符可以通过这样的方式:@PathVariable(“xxx”) 绑定到操作方法的入参中。

下面将给出详细例子:
请求路径 : http://www.test.com/user/031267/view?username=zhangsan&age=20
请求URL : http://www.test.com/user/031267/view

@RequestMapping(value = "/user/{userid}/view")  //占位符 userid
public String view ( @PathVariable("userid") String userid){ //@PathVariable 中指定 userid
    System.out.println("userid= "+userid);   //此处可以获取:userid= 031267
    return SUCCESS;
}

@RequestParam 获取request请求参数中的值

  • 请求路径:http://www.test.com/user/query?username=zhangsan&age=20
    请求参数:username=zhangsan&age=20
@RequestMapping(value = "/user/query")
public String query(@RequestParam(value="username") String username) {	
	System.out.println("username = " + username);   //此处打印:username = zhangsan
	return SUCCESS;
}

通过@RequestParam 获取 不同请求对应的值:

…/query?username=zhangsan 获取 username 等于 zhangsan
…/query?username= 获取 username==""
…/query 获取 username==null
@RequestParam 默认必传的,不能为null

如上面例子,请求路径是 http://www.test.com/user/query?age=20 ,程序一定会报错的,
如果username不传时, 就是null ,而 @RequestParam 默认是必传的。

解决方法:

  • 第1种: 请求路径改为 http://www.test.com/user/query?username=&age=20 表示
    username=="",不为null;
  • 第2种: required=false,具体如下:
    @RequestParam(value=“username”,required=false) String username

两者的共同使用

请求路径 : http://www.test.com/user/031267/view?username=zhangsan&age=20

@RequestMapping(value = "/user/{userid}/view")
public String query(@PathVariable("userid") String userid,@RequestParam(value="username") String username ) {	
	System.out.println("userid= "+userid);   //此处可以获取:userid= 031267
	System.out.println("username = " + username);   //此处打印:username = zhangsan
	return SUCCESS;
}

关于两者的其他详细使用及特殊情况

  • 放上一篇csdn大佬文章链接:https://blog.csdn.net/qq_33355821/article/details/85619692?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-5.control
  • 参考借鉴链接:
    https://xiaojin21cen.blog.csdn.net/article/details/83628701
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员洲洲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值