正确理解“访问请求”、“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; }
关于两者的其他详细使用及特殊情况
参考借鉴链接:
https://xiaojin21cen.blog.csdn.net/article/details/83628701