如何传递具有数组项的查询参数或表单参数,以便所有选项都应该通过

问题描述 投票:0回答:2

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

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

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

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

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

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

该字段是一个多选字段,接受所有值。

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

注意:在 Postman 中,如果我像这样传递它,它就可以正常工作:

 "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();

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

java rest-assured rest-assured-jsonpath
2个回答
0
投票

不清楚需要发送的格式到底是什么,
但快速猜测是:

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

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

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

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


0
投票

晚了两年,但我已经找到答案了!

要发送包含值数组的 formParam,键必须以

[]
为后缀。

因此,对于您的示例,这应该有效:

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

在 PostMan 中处理请求给了我线索:是否可以使用 Postman Chrome 扩展发送数组?

© www.soinside.com 2019 - 2024. All rights reserved.