Restassured中when().parameter()与when().body()传值差异

通过param传参就会报长度问题如图一,同样长度的参数数据通过body应可成功,未报错,如图二,为什么呢?这两个方式传参有什么不一样吗?

@MMOOO 同学你好!

这个企业微信的部门的create接口,是需要使用POST请求,请求数据为json格式。因此固定写法就是使用body()来传递json请求数据。这是正确的姿势哈。

如你所提到的问题点,为什么在这里使用param()会报错。

首先我们来分析下param()的用法,这个方法是用来定制请求数据,语法是given().param()。它的含义是,REST-assure 会自动根据请求动作的不同而决定参数的类型:

  • 如果是GET请求,那么param所传的数据会成为查询参数(query parameters),也就是会出现在URL中;
  • 如果是POST请求,那么param所传的数据会成为表单参数(form parameters),具体格式会被url编码,格式类似于:k1=v1&k2=v2。

因此,在POST请求中使用param(),实际按照表单格式传递数据,而企业微信规定来接收的是application/json。因此会出现解析异常,请求不通过。

另外,同学可以抓包一下,观察两种参数指定的接口请求中数据格式的区别。

讲的好详细啊~感谢~ :+1: