postman的几种数据传输格式的区别
先看下get和post请求的区别:
1、get使用url或Cookie传参,而post将数据放在body中
2、get的url会有长度上的限制,而post的数据则可以非常大
3、post比get安全,因为数据在地址栏上不可见
4、一般get请求用来获取数据,post请求用来发送数据
Get和Post都是Http协议的组件,所以底层都是使用tcp链接。Get的请求方式是将http的header和data一并发往服务端,也就是一条tcp数据包发送,这就会有两个问题:
数据量有限,依赖于Tcp负载能力,所以携带的数据量很大的情况下,容易造成重发。
所有的携带的数据只能接受转化成ASCII字符。
但是Post不一样,post使用两步走,先发送http的header,然后再传输data。数据类型也不受限制。而且数据隐秘性比较好。
————————————————原文链接:https://blog.csdn.net/weixin_42765975/article/details/99175476
一、postman的传参方式一般有两种,params和body;body里面又分了form-data、x-www-form-urlencode、row等等几种;根据请求方式的不同,传参方式也不一样;
1、get请求方式,一般的传参是params,并且会以url?name="lele"&age=2这样的格式,接到url的后面,如下图
2、post请求方式,主要也是分为两种;post是先发送headers,再传输data,所以可以先确认header里面的Content-Type的值,这个是data数据的传输方式;
如果Content-Type=application/x-www-form-urlencoded,那传输方式就选择body里面的x-www-form-urlencode;
如果Content-Type=mutipart/form-data,那传输方式就是body里面的form-data;
application/x-www-form-urlencoded*(这个是form-data默认的enctype属性类型值,数据url?name=“小小”&age=12,这样的格式,在ajax请求里面就是用param来标识,@RquestParam就是用来接受这种数据格式的)
x-www-form-urlencode这个的传参和get里面的params传参是一样的,只是x-www-form-urlencode不接到url后面,后台都是用的@RquestParam来接收;
另一种就是Content-Type=application/json,传输方式是body里面的row,参数是存放在json中的,参数必须要用@RequestBody才能解析出来。
form-data格式一般是用来进行文件上传的。使用表单上传文件时,必须让
表单的 enctype 等于 multipart/form-data,因为该值默认值为application/x-www-form-urlencoded
RequestParam这种方式只用在Content-Type=application/x-www-form-urlencoded这种情况下才能使用,这里的@RequestParam(“iv”)代表传参名称是iv(name=”iv”),且是必填。如果不是必填,可以改成如下形式:sevlet将Body中的key-value转成Param。
上面说的这些都不是绝对的,只是一般规则是这样;
在发get请求的时候如果在formdata里面加了文件,也可以发请求,并且成功,但是文件是接收不到的,并且这些form-data参数不追加到url,只有params参数会被追加到url;
有一个有趣的现象,如果Content-Type=mutipart/form-data,Body中加入参数并且params里面也加了参数一起发过去,并且出现,params参数和for-data参数出现重名,URL后面也就会拼接参数一起,分别发Post请求和post请求,重名的参数只取params里面的;
如果Content-Type=application/x-www-form-urlencoded和params参数一起发送,如果是String类型,则两个值会被拼接,其他类型取的是params的参数。
RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的 数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。,没有@RequestBody修饰直接写实体类作为参数,后台是接收不到Json字符串的,只能通过参数form-data里面的param接受
————————————————
原文链接:https://blog.csdn.net/weixin_42765975/article/details/99175476