当前位置:   article > 正文

SpringMVC 中@RequestParam注解、@RequestHeader注解、@RequestBody注解请求_@headerparam与@requestparam

@headerparam与@requestparam

做开发的时候,有的时候经常弄混这几种区别,今天在掘金看到一篇文章,所以记录一下一次搞定SpringMVC参数绑定

@RequestHeader注解

@RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。注意我们发送的数据是在header部分,复习一下 http的请求报文格式

POST /?id=1 HTTP/1.1                           //请求行 
Host: echo.paw.cloud                              //请求头部
Content-Type: application/json; charset=utf-8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Connection: close
Content-Length: 136
                                                  //空行                   
{                                                 //请求体
  "status": "ok",
  "extended": true,
  "results": [
    {"value": 0, "type": "int64"},
    {"value": 1.0e+3, "type": "decimal"}
  ]
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

所以如果我们的请求方法这样写

 @RequestMapping("/header")
 public void testHeaderParam(HttpServletRequest request, @RequestHeader String param1) {
      System.out.println("通过RequestHeader获取的参数param1=" + param1);
  }

  • 1
  • 2
  • 3
  • 4
  • 5

那么不论get 还是post方法,postman都可以这样发送请求

在这里插入图片描述

最后的控制台打印结果为:通过RequestHeader获取的参数param1=test

@RequestParam注解

这一端是从参考博文粘贴过来的:

@RequestParam注解用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。提交方式为get或post。(Http协议中,form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded);
@RequestParam注解实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段,get方式中queryString的值,和post方式中body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到;

所以如果代码这样写

 @RequestMapping("/param")
    public void testRequestParam(HttpServletRequest request,
                                 @RequestParam(value = "num", required = true, defaultValue = "0") int num) {
        System.out.println("通过RequestParam获取的参数num=" + num);
    }
  • 1
  • 2
  • 3
  • 4
  • 5

对于Get 方式
在这里插入图片描述
对于Post方式
我自己测试有两种方式
1.既可以把参数放入body方式,以application/x-www-form-urlencoded 发送
在这里插入图片描述
2.也可以像 Get方式,把参数放入url中
在这里插入图片描述

@RequestBody注解

@RequestBody注解用来处理HttpEntity(请求体)传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据;GET请求中,因为没有HttpEntity,所以@RequestBody并不适用;POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

 @RequestMapping("/body")
    public void testRequestBody(HttpServletRequest request, @RequestBody String bodyStr){
        System.out.println("通过RequestBody获取的参数bodyStr=" + bodyStr);
    }
  • 1
  • 2
  • 3
  • 4

既然只有post方式的,指定 Content-Type: 不为 application/x-www-form-urlencoded,我指定为text/plain,那么控制台为:

通过RequestBody获取的参数bodyStr=ewq2

一般@RequestBody 绑定的是一个对象,那么就可以前台请求体为JSON,后台就可以接收到了
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/310103
推荐阅读
相关标签
  

闽ICP备14008679号