欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC 中@RequestParam注解、@RequestHeader注解、@RequestBody注解请求

程序员文章站 2022-07-12 19:18:53
...

做开发的时候,有的时候经常弄混这几种区别,今天在掘金看到一篇文章,所以记录一下一次搞定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"}
  ]
}

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

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

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

SpringMVC 中@RequestParam注解、@RequestHeader注解、@RequestBody注解请求

最后的控制台打印结果为:通过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);
    }

对于Get 方式
SpringMVC 中@RequestParam注解、@RequestHeader注解、@RequestBody注解请求
对于Post方式
我自己测试有两种方式
1.既可以把参数放入body方式,以application/x-www-form-urlencoded 发送
SpringMVC 中@RequestParam注解、@RequestHeader注解、@RequestBody注解请求
2.也可以像 Get方式,把参数放入url中
SpringMVC 中@RequestParam注解、@RequestHeader注解、@RequestBody注解请求

@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);
    }

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

通过RequestBody获取的参数bodyStr=ewq2

一般@RequestBody 绑定的是一个对象,那么就可以前台请求体为JSON,后台就可以接收到了
SpringMVC 中@RequestParam注解、@RequestHeader注解、@RequestBody注解请求
SpringMVC 中@RequestParam注解、@RequestHeader注解、@RequestBody注解请求

上一篇: JMeter

下一篇: acm 网站