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

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

正确理解“访问请求”、“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


相关文章
|
6天前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
6天前
|
前端开发 JavaScript Java
6个SpringBoot 项目拿来就可以学习项目经验接私活
6个SpringBoot 项目拿来就可以学习项目经验接私活
43 0
|
6天前
|
前端开发 Java 数据库
基于springboot的书籍学习平台
基于springboot的书籍学习平台
|
6天前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
209 0
|
6天前
|
XML Java 应用服务中间件
【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识
【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识
10 0
|
6天前
|
Java 开发工具 Maven
根据SpringBoot Guides完成进行示例学习(详细步骤)
根据SpringBoot Guides完成进行示例学习(详细步骤)
9 1
|
6天前
|
存储 前端开发 Java
Spring Boot自动装配的源码学习
【4月更文挑战第8天】Spring Boot自动装配是其核心机制之一,其设计目标是在应用程序启动时,自动配置所需的各种组件,使得应用程序的开发和部署变得更加简单和高效。下面是关于Spring Boot自动装配的源码学习知识点及实战。
17 1
|
6天前
|
XML Java 数据格式
Spring学习__一篇足矣
Spring学习__一篇足矣
Spring学习__一篇足矣
|
6天前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
6天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例