我有一个具有多个表单参数的请求。其中一个表单参数的格式如下:
"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();
输出:这从项目列表中获取第一个值。
不清楚需要发送的格式到底是什么,
但快速猜测是:
DistributionChoices=["ABC.com", "JPQ.com", "N\A"]
。
因此,为了将列表解析为这种格式,请执行以下操作:
var value = "[\"" + String.join("\", \"", Arrays.asList("ABC.com", "JPQ.com", "N\\A")) + "\"]";
queryParam.put("DistributionChoices", value)
这只是在此列表中的每个单词之间添加一个逗号,并将它们括在括号中。 (JSON格式)
晚了两年,但我已经找到答案了!
要发送包含值数组的 formParam,键必须以
[]
为后缀。
因此,对于您的示例,这应该有效:
formParam("DistributionChoices[]", Arrays.asList("ABC.com", "JPQ.com", "N\A"));
在 PostMan 中处理请求给了我线索:是否可以使用 Postman Chrome 扩展发送数组?