1.介绍几种如何处理url中的参数的注解

@PathVaribale  获取url中的数据

@RequestParam  获取请求参数的值

@GetMapping  组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写

(1)PathVaribale 获取url中的数据

  看一个例子,如果我们需要获取Url=localhost:8080/hello/id中的id值,实现代码如下:

  1. 1 @RestController
  2. 2 public class HelloController {
  3. 3 @RequestMapping(value="/hello/{id}/{name}",method= RequestMethod.GET)
  4. 4 public String sayHello(@PathVariable("id") Integer id,@PathVariable("name") String name){
  5. 5 return "id:"+id+" name:"+name;
  6. 6 }
  7. 7 }

在浏览器中 输入地址: localhost:8080/hello/100/helloworld 然后会在html页面上打印出:

id:81

  同样,如果我们需要在url有多个参数需要获取,则如下代码所示来做就可以了。

  1. 1 @RestController
  2. 2 public class HelloController {
  3. 3 @RequestMapping(value="/hello/{id}/{name}",method= RequestMethod.GET)
  4. 4 public String sayHello(@PathVariable("id") Integer id,@PathVariable("name") String name){
  5. 5 return "id:"+id+" name:"+name;
  6. 6 }
  7. 7 }

在浏览器中输入地址: localhost:8080/hello/100/helloworld 然后会在html页面上打印出:

id:100 name:helloworld

  以上,通过 @PathVariable 注解来获取URL中的参数时的前提条件是我们知道url的格式时怎么样的。
  只有知道url的格式,我们才能在指定的方法上通过相同的格式获取相应位置的参数值。
  一般情况下,url的格式为: localhost:8080/hello?id=98 ,这种情况下该如何来获取其id值呢,这就需要借助于 @RequestParam 来完成了

  

2.@RequestParam 获取请求参数的值

  例如:

  1. @RestController
  2. public class HelloController {
  3. @RequestMapping(value="/hello",method= RequestMethod.GET)
  4. public String sayHello(@RequestParam("id") Integer id){
  5. return "id:"+id;
  6. }
  7. }

在浏览器中输入地址: localhost:8080/hello?id=1000 ,可以看到如下的结果:

id:1000

当我们在浏览器中输入地址: localhost:8080/hello?id  ,即不输入id的具体值,此时返回的结果为null。具体测试结果如下:

id:null

但是,当我们在浏览器中输入地址: localhost:8080/hello  ,即不输入id参数,则会报如下错误:

 whitelable Error Page错误 

@RequestParam 注解给我们提供了这种解决方案,即允许用户不输入id时,使用默认值,具体代码如下:

  1. 1 @RestController
  2. 2 public class HelloController {
  3. 3 @RequestMapping(value="/hello",method= RequestMethod.GET)
  4. 4 //required=false 表示url中可以不穿入id参数,此时就使用默认参数
  5. 5 public String sayHello(@RequestParam(value="id",required = false,defaultValue = "1") Integer id){
  6. 6 return "id:"+id;
  7. 7 }
  8. 8 }

如果在url中有多个参数,即类似于 localhost:8080/hello?id=98&&name=helloworld 这样的url,同样可以这样来处理。具体代码如下:

  1. 1 @RestController
  2. 2 public class HelloController {
  3. 3 @RequestMapping(value="/hello",method= RequestMethod.GET)
  4. 4 public String sayHello(@RequestParam("id") Integer id,@RequestParam("name") String name){
  5. 5 return "id:"+id+ " name:"+name;
  6. 6 }
  7. 7 }

在浏览器中的测试结果如下: localhost:8080/hello?id=1000&name=helloworld 地址,就会显示下面的内容:
 id:1000 name:helloworld

3.@GetMapping 组合注解

@GetMapping 是一个组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写。该注解将HTTP Get 映射到 特定的处理方法上。
即可以使用 @GetMapping(value = “/hello”) 来代替 @RequestMapping(value=”/hello”,method= RequestMethod.GET) 。即可以让我们精简代码。

  1. 1 @RestController
  2. 2 public class HelloController {
  3. 3 //@RequestMapping(value="/hello",method= RequestMethod.GET)
  4. 4 @GetMapping(value = "/hello")
  5. 5 //required=false 表示url中可以不穿入id参数,此时就使用默认参数
  6. 6 public String sayHello(@RequestParam(value="id",required = false,defaultValue = "1") Integer id){
  7. 7 return "id:"+id;
  8. 8 }
  9. 9 }

4.PostMapping组合注解:

  方法同GetMapping

其它:

SpringMVC接收参数分情况有很多方式,用于绑定参数或者接收参数的注解有很多,当然springboot也一样,因为SpringBoot用的就是SpringMVC。我们大致可以根据它们处理request的方式不同,分成四类。

  1. @RequestParam ,@RequestBody //处理request body部分的注解
  2. @PathVariable //处理request 动态url的(resultful风格)注解
  3. @RequestHeader @CookieValue //处理request头部信息的注解
  4. @SessionAttributes @ModelAttributes //处理attributesd的注解

1,通常情况下,我们用名字匹配原则就可以接收参数

直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。

url为:http:127.0.0.1/login?userName=1111&pwd=2222

  1. @RequestMapping(“/login”)
  2. public void login(String loginname,String pwd)
  3. {
  4. system.out.println(loginname+“:”+pass);
  5. }

或者
通过一个bean来接收,post方式和get方式都可以。

  1. public Class User{
  2. private String userName;
  3. private String pwd;
  4. //setting和getting方法
  5. }
  6. @requestMapping(“/login”)
  7. public void login(User user){
  8.   System.out.println(userName+“ :”+pwd);
  9. }

当然可以通过HttpServletRequest接收,post方式和get方式都可以。

  1. @RequestMapping(“/login”)
  2. public String addUser2(HttpServletRequest request) {
  3. String username=request.getParameter(“username”);
  4. String password=request.getParameter(“pwd”);
  5. System.out.println(“username is:”+username);
  6. System.out.println(“password is:”+password);
  7. return demo/index”;
  8. }

2.@RequestParam注解用于将指定的请求参数赋值给方法的参数。
虽然第一种方法可以,但是方法的参数要跟前端一样,这样不方便,而且为空时不能设置默认值,于是有了@RequestParam注解

属性 类型 是否必要 说明
name String 指定绑定请求的参数
value String name属性的别名,就是方法的参数名
reuuired boolean 指定方法是否绑定,如果绑定,方法参数必要有值
defaultValue String 如果请求没有传递值,而给方法参数默认的值
  1. @RequestMapping(“/login”)
  2. public void login(@RequestParam(name=“loginname”) String loginname,@RequestParam(name=“passname”,value=“pass”) String pass)
  3. {
  4. system.out.println(loginname+“:”+pass);
  5. }

3.@RequestBody将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
上面都是普通的字段,但是json字符串怎么接收呢,于是有了@RequestBody。将前台使用get和post方式提交数据时,数据编码格式由请求头ContentType指定,可以分这几种情况:
application/x-www-form-urlencoded:可以用@RequestParam很方便的接收,当然@RequestBody也可以
application/json或者application/xml:只能用@RequestBody接收
multipart/form-data:.@RequestBody不能接收这种

  1. @requestMapping(“/login”)
  2. public void login(@requestBody String userName,@requestBody String pwd){
  3.   System.out.println(userName+“ :”+pwd);
  4. }
  5. $.ajax({
  6. url:“/login”,
  7. type:“POST”,
  8. data:‘{“userName”:”admin”,”pwd”,”admin123”}’,
  9. content-type:“application/json charset=utf-8”, //必须application/json
  10. success:function(data){
  11. alert(“request success ! “);
  12. }
  13. });

这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是如果很多呢,这样我们就可以@RequestBody和JavaBean来接收

  1. public Class User{
  2. private String userName;
  3. private String pwd;
  4. //setting和getting方法
  5. }
  6. @requestMapping(“/login”)
  7. public void login(@requestBody User user){
  8.   System.out.println(userName+“ :”+pwd);
  9. }
  1. $.ajax({
  2. url:“/login”,
  3. type:“POST”,
  4. data:‘{“userName”:”admin”,”pwd”,”admin123”}’,
  5. content-type:“application/json charset=utf-8”,
  6. success:function(data){
  7. alert(“request success ! “);
  8. }
  9. });

说明:

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);

GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。

在后端的同一个接收方法里,@RequestBody 与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam

4.@PathVariable注解可以方便的得到url中的动态参数,@PathVariable注解只有一个属性name,用来绑定参数的名称,如果不填,则默认是方法的参数名。

  1. @requestMapping(“/login/{userId}”)
  2. public void login(@PathVariable String userId){
  3.   System.out.println(userId);
  4. }
  5. @requestMapping(“/login/{userId}”)
  6. public void login(@PathVariable(name=“userId”) String username){
  7.   System.out.println(username);
  8. }

说明:
可以在@RequestMapping注解中用{}来表明它的变量部分,这种被称为resultful风格,例如:

  1. @RequestMapping(“/login/{userId}”)

这里{userId}就是我们定义的变量规则,userId是变量的名字,那么这个URL路由可以匹配下列任意URL并进行处理:

  1. /login/tianmaying
  2. /login/ricky
  3. /login/tmy1234

注意:在默认情况下,变量中不可以包含URL的分隔符/,例如路由不能匹配/users/tianmaying/ricky,即使你认为tianmaying/ricky是一个存在的用户名

5.@CookieValue 用于将请求的cookie数据映射到方法的参数上。

属性 类型 是否必要 说明
name String 指定绑定请求的参数
value String name属性的别名,就是方法的参数名
reuuired boolean 指定方法是否绑定,如果绑定,方法参数必要有值
defaultValue String 如果请求没有传递值,而给方法参数默认的值
  1. @RequestMapping(“/login”)
  2. public void login(@CookieValue(value=“NAME”,defaultValue “”) String sessionId)
  3. {
  4. system.out.println(sessionId);
  5. }

上面会把NAME的值给sessionId,如果没有这个cookie,则默认为空。

【转】SpringBoot处理url中的参数的注解的更多相关文章

  1. SpringBoot处理url中的参数的注解

    1.介绍几种如何处理url中的参数的注解 @PathVaribale  获取url中的数据 @RequestParam  获取请求参数的值 @GetMapping  组合注解,是 @RequestMa ...

  2. 如何获取url中的参数并传递给iframe中的报表

    在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数 ...

  3. JavaScript如何获取网页url中的参数

    我们可以自定义一个公共函数来实现网页url中的参数获取,返回的是一个数组 GetUrlRequest: function () { var url = decodeURI(location.searc ...

  4. 使用JS,获取URL中指定参数的值

    /** * 获取URL中指定参数的值 * * @param name 参数名称 * @returns */ function getQueryString(name) { var reg = new ...

  5. APPCAN开发笔记:html页面之间的参数传递:使用js获取url中的参数,以及在APPCAN中不能使用的解决方法

    用PHP的GET/POST方式来传递方式已经是司空见惯了,但是如果我的页面是一个静态的html的页面,想传递参数的时候要怎么办呢?在APPCAN的开发中我们会经常遇到这样的问题,因为所有的页面都是静态 ...

  6. 通过Javascript得到URL中的参数(query string)

    我们知道,"GET"请求中,通常把参数放在URL后面,比如这样http://www.cnblogs.com/season-huang/index?param=yes&art ...

  7. javaScript获取url中的参数

    var urlTools = { //获取RUL参数值 getUrlParam: function(name) { /*?videoId=identification */ var params = ...

  8. ${param.xxx}获取url中的参数

    在项目中看到了一个很奇怪的EL表达式...${param.catid}...一直找不到param在哪里定义的...(主要是水平太屎...) 然后从网上查了一下才知道是啥... EL表达式${param ...

  9. vue中如何不通过路由直接获取url中的参数

    前言:为什么要不通过路由直接获取url中的参数? vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的. 相对来说,在某些情况下直接 ...

随机推荐

  1. GoCN每日新闻(2019-10-16)

    GoCN每日新闻(2019-10-16) GoCN每日新闻(2019-10-16) 1. 持续的性能分析与优化 https://medium.com/@tvii/continuous-profilin ...

  2. (15)Go错误处理

    1.erro(一般错误) package main import ( "errors" "fmt" ) func div(a, b int) (res int) ...

  3. 最大子段和(洛谷 P1115)

    题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入格式 第一行是一个正整数NNN,表示了序列的长度. 第二行包含NNN个绝对值不大于100001000010000的整数AiA_iA ...

  4. EasyEarth三维可视化解决方案——智慧河长

    EasyEarth—— 为河长装上“千里眼.顺风耳” 为各级河长办应急指挥.任务指派. 实绩考核提供快速直观的 高效.精准.智能化决策平台. 河长制背景 我国治水工作呈现出新老问题交织态势,河湖管理保 ...

  5. 如何解决“HttpException (0x80004005): 超过了最大请求长度”问题

    .net mvc项目在做上传文件时,出现这个问题,上传文件的是通过表单提交,后台是通过请求里面获取文件信息的 1.问题截图: 堆栈信息 “/”应用程序中的服务器错误.超过了最大请求长度.说明: 执行当 ...

  6. Mxnet:以全连接层为例子自定义新的操作(层)

    https://blog.csdn.net/a350203223/article/details/77449630 在使用深度学习平台时,光会使用其中已定义好的操作有时候是满足不了实际使用的,一般需要 ...

  7. vue-qriously 生成二维码并下载、cliploard复制粘贴

    xxx.vue <template> <a-modal class="dialogRecharge" title="活动链接及二维码" v-m ...

  8. linux下node.js 查版本号和更新 how to update node

    我用的Mac,不是windows,不太清楚那个怎么搞. Linux下就是终端直接命令 //查版本号 node --version // v6.10.1 我很久没更了 //更新 //先清理Npm的cac ...

  9. centos 安装 libiconv

    安装方法如下: cd /usr/local/src wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar -zxvf li ...

  10. [LeetCode] 171. Excel Sheet Column Number 求Excel表列序号

    Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...