网络请求踩坑

  • http请求之Request Payload、Query String Parameters、Form Data区别

在与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:

传入参数:

若有收获,就点个赞吧

猜你喜欢

转载自blog.csdn.net/irisMoon06/article/details/128776467