首页 > 解决方案 > 放心 -> 如何传递具有数组项的查询参数或表单参数,以便所有选项都应该通过

问题描述

我有一个具有多个表单参数的请求。表单参数之一的格式如下:

"DistributionChoices": ["ABC.com", "JPQ.com", "N\A"]

当我使用 queryParams 进行发布请求并传递时:

queryParam.put("DistributionChoices", Arrays.asList("ABC.com", "JPQ.com", "N\A"));

或者

formParam("DistributionChoices", Arrays.asList("ABC.com", "JPQ.com", "N\A"));

然后它只选择第一个值,即:ABC.com

该字段是一个接受所有值的多项选择。

如何传递此参数中的所有值?

注意:在邮递员中,如果我这样传递它,它工作正常:

 "DistributionChoices": ["ABC.com", "JPQ.com", "N\A"]

语言:Java 框架:RestAssured 和 TestNG

代码:

List<String> items = Arrays.asList("ABC.com", "JPQ.com", "N\A");

RestAssured.base = "baseURI";
Map<String, Object> queryParams = new HashMap<>();
queryParams.put("apiKey","apiKeyValue");
queryParams.put("name","nameValue");
queryParams.put("description","descriptionValue");

queryParams.put("distrbutionChoice",items); // Here is the issue

RestAssured.given().params(queryParams);

Response response = request.when().post();

输出:这从项目列表中获取第一个值。

标签: javarest-assuredrest-assured-jsonpath

解决方案


目前尚不清楚它需要发送的确切格式是什么,
但快速猜测是:DistributionChoices=["ABC.com", "JPQ.com", "N\A"].

因此,为了将列表解析为这种格式,请执行以下操作:

var value = "[\"" + String.join("\", \"", Arrays.asList("ABC.com", "JPQ.com", "N\\A")) + "\"]";
queryParam.put("DistributionChoices", value)

这只是在此列表中的每个单词之间添加一个逗号,并将它们括在括号中。(JSON 格式)


推荐阅读