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:
传入参数:
更多推荐
所有评论(0)