在与server端进行数据传递时,通常会用到GET、POST方法进行参数提交,而参数提交的方式,通常取决于server端对数据的接收方式。

1.Request Payload

当发起一次POST请求时,若content-type为application/json,则参数会以Request Payload的形式进行传递(显然的,数据格式为JSON),不会显式出现在请求url中。
headers:
在这里插入图片描述传入参数:
在这里插入图片描述

常见问题:

vue axois 请求接口默认解析为Request Payload。

如果希望通过Form Data的方式来传递数据,则可以通过原生方法formData()来进行数据组装,且content-type需要设置为multipart/form-data。

解放方案:
将’Content-Type’:'applicacaton/json’改为:‘Content-Type’: ‘application/x-www-form-urlencoded’,
方法如下:

// 通用公用方法
const req = (method, url, params) => {  
  return axios({   
     method: method,  
     url: url,      
    headers: { 
    'Content-Type': 'application/x-www-form-urlencoded',     
  },       
   data: params,     
  traditional: true,    
 transformRequest: [  
 function(data) {     
       let ret = ''              
       for (let it in data) {     
         ret +=                    
        encodeURIComponent(it) +            
          '=' +                      
         encodeURIComponent(data[it]) +        
         '&' 
         }               
          return ret          
     }        
   ]   
  }).then(res => res.data);};

请求正文为Request Payload,请求头Content-Type: application/json,以这种方式请求,后台用@RequestParam是接收不到参数的,只能用@RequestBody,或者通过实现spring的HandlerMethodArgumentResolver 接口,自定义参数解析器去单个接收参数.

Request Payload的请求正文格式是json格式的字符串:
{ “loginName” : “admin”, “password” : “123456” }

2.Form Data

当发起一次POST请求时,若未指定content-type,则默认content-type为application/x-www-form-urlencoded。即参数会以Form Data的形式进行传递,不会显式出现在请求url中。
在这里插入图片描述

Form Data请求:
这里写图片描述

Form Data的请求正文格式是用key=value&key1=value2格式:
loginName=admin&password=123456

后台处理:
对于 Request Payload 请求, 必须加 @RequestBody 才能将请求正文解析到对应的 bean 中,且只能通过 request.getReader() 来获取请求正文内容
这里写图片描述

对于 Form Data 请求,无需任何注解,springmvc 会自动使用 MessageConverter 将请求参数解析到对应的 bean,且通过 request.getParameter(…) 能获取请求参数,或者通过@RequestParam接收

3.Query String Parameters

Query String Parameters当发起一次GET请求时,参数会以url string的形式进行传递。即?后的字符串则为其请求参数,并以&作为分隔符。如下http请求报文头:
headers:
在这里插入图片描述
传入参数:

在这里插入图片描述

 

 

 

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐