postman测试三种传输数据格式(其实是只有两种),json对象和formData对象互转

您所在的位置:网站首页 前端传json对象 postman测试三种传输数据格式(其实是只有两种),json对象和formData对象互转

postman测试三种传输数据格式(其实是只有两种),json对象和formData对象互转

2024-01-21 15:17| 来源: 网络整理| 查看: 265

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 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 form-data用get请求后端也能接受,但是文件是不能接收到的,如图 在这里插入图片描述

有一个有趣的现象,如果Content-Type=mutipart/form-data,Body中加入参数并且params里面也加了参数一起发过去,并且出现,params参数和for-data参数出现重名,URL后面也就会拼接参数一起,分别发Post请求和post请求,重名的参数只取params里面的   看下图;   在这里插入图片描述   在这里插入图片描述   post请求输出:   在这里插入图片描述   把postman的请求换成get请求,其他的不变   看输出:   在这里插入图片描述   如果Content-Type=application/x-www-form-urlencoded和URL拼接的一起,如果是String类型,则两个值会被拼接,其他类型取的是URL拼接的参数。 RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的 数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。,没有@RequestBody修饰直接写实体类作为参数,后台是接收不到Json字符串的,只能通过参数form-data里面的param接受 postman测试的步骤如下图

在这里插入图片描述

@RequestMapping(value = "/body", method = RequestMethod.POST) public String body(@RequestBody myDto dto){ System.out.println(dto.getName()+dto.getAge()); return dto.getName(); }

在这里插入图片描述

@RequestMapping("/givePojo") public String pojo(myDto dto){ System.out.println(dto.getName()+dto.getAge()); return dto.getName(); }

没有@RequestBody修饰没有返回值 在这里插入图片描述

参考

json对象和formData对象互转

在这里插入图片描述

get请求用application/x-www-form-urlencoded编码格式传数据后端用@RequestParam接受时会报错,不加@RequestParam也接受不到,因为编码格式不对,后端无法接受,加了@RequestParam时没有匹配上数据时会报错。。

加上application/x-www-form-urlencoded本来就是post传输数据的默认的编码格式。 服务器知道参数用符号&间隔,如果参数值中需要&,则必须对其进行编码。编码格式就是application/x-www-form-urlencoded(将键值对的参数用&连接起来,如果有空格,将空格转换为+加号;有特殊符号,将特殊符号转换为ASCII HEX值



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3