postman测试三种传输数据格式(其实是只有两种),json对象和formData对象互转 |
您所在的位置:网站首页 › 前端传json对象 › postman测试三种传输数据格式(其实是只有两种),json对象和formData对象互转 |
url上拼接数据的两种格式
第一种:url?name=“小小”&age=12,application/x-www-form-urlencoded*格式的这个是form-data默认的enctype属性类型值,数据url?name=“小小”&age=12,这样的格式,在ajax请求里面就是用param来标识,后端用@RequestParam接受,这也是键值对格式的数据,前端变量名也传了 第二种:直接传值,不要变量名在url上加斜杠再加要传的值,不用传变量名,不是键值对格式的,不符合restful风格 例如: @RequestMapping("/getProject/123") 后端用@PathVariable(“getProject/{id}”) public string project(@PathVariable(value=""id) Integer id){ System.out.printf(id); } 三种数据格式:Get和Post都是Http协议的组件,所以底层都是使用tcp链接。Get的请求方式是将http的header和data一并发往服务端,也就是一条tcp数据包发送,这就会有两个问题: 数据量有限,依赖于Tcp负载能力,所以携带的数据量很大的情况下,容易造成重发。 所有的携带的数据只能接受转化成ASCII字符。 但是Post不一样,post使用两步走,先发送http的header,然后再传输data。数据类型也不受限制。而且数据隐秘性比较好。 post可以传递参数可以大致分成两种,一种是表单(form-data):在sevlet实现中mutipart/form-data和application/x-www-form-urlencoded*(这个是form-data默认的enctype属性类型值,数据url?name=“小小”&age=12,这样的格式,在ajax请求里面就是用param来标识,@RquestParam就是用来接受这种数据格式的)会被特殊处理,请求参数将被放置于request.paramter,解析成map。第二种,已application/json,参数是存放在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。 总结起来,后端方法参数,是一个实体类可以用form-data表单application/json,但是有文件一起和参数一起就只能用form-data,@RequestParam后面只加基本类型,不加封装类 form-data数据可能会加入到params中在发get请求的时候如果在formdata里面加了文件,也可以发请求,并且成功,但是文件是接收不到的,但是这些form-data参数不追加到url,只有params参数会被追加到url,并不是说get请求就一定追加到url
有一个有趣的现象,如果Content-Type=mutipart/form-data,Body中加入参数并且params里面也加了参数一起发过去,并且出现,params参数和for-data参数出现重名,URL后面也就会拼接参数一起,分别发Post请求和post请求,重名的参数只取params里面的 看下图; 没有@RequestBody修饰没有返回值 参考 json对象和formData对象互转加上application/x-www-form-urlencoded本来就是post传输数据的默认的编码格式。 服务器知道参数用符号&间隔,如果参数值中需要&,则必须对其进行编码。编码格式就是application/x-www-form-urlencoded(将键值对的参数用&连接起来,如果有空格,将空格转换为+加号;有特殊符号,将特殊符号转换为ASCII HEX值 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |