使用 Multimap 而不是 Map 为 Rest Assured Call 发送参数
Use Multimap instead of Map for sending parameters for Rest Assured Call
我正在声明一个变量
static Multimap<String, Object> multiList = ArrayListMultimap.create();
并添加像
这样的值
multiList.put(**key1**,value1)
multiList.put(**key1**,value1)
multiList.put(**key2**,value3)
现在,我传递的请求是这样的
Response response = RestAssured.given().header("Cookie", SessionDetailsCedar.CSESSIONID).and().header("X-CSRFToken", SessionDetailsCedar.CSRF).and().header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8").and().header("Connection", "keep-alive").formParameters(<b>multiList</b>).when().post(<b>Some URL</b>);
我的问题是 formParameters(Map) 仅使用 Map 作为参数,而我想改用 Multimap
坏消息是这不是真的可以接受:
在RFC 3986的3.4节查询中,没有定义多值参数。
似乎有可能的好消息:
1 Map 和 Set 应该可以完成工作:
com.ning.http.client.FluentStringsMap map = new com.ning.http.client.FluentStringsMap();
map.add("name", "one_value");
Set<String> values= new HashSet<String>();
values.add("1");
values.add("2");
values.add("3");
values.add("4");
map.add("values", values);
参见:How to send request parameters with same parameter-name
2 如果你的值很少,你可以通过几个列表或可变参数来放置:
https://code.google.com/p/rest-assured/wiki/Usage#Parameters
. param("myList", "value1", "value2"). ..
List<String> values = new ArrayList<String>();
values.add("value1");
values.add("value2");
.param("myList", values). ..
https://code.google.com/p/rest-assured/wiki/Usage#Static_imports
3 另一种解决方案是使用 JSON.
Multimap 不能转换为Map,因为它违反了Map 的定义。在这种情况下,我认为您应该使用 REST assured 的另一种方法 formParam 方法,如下例所示:
RestAssured.
given().
contentType("application/x-www-form-urlencoded; charset=ISO-8859-1").
formParam("key1", value1).
formParam("key1", value2).
formParam("key2", value3).
when().
post("Some URL");
我正在声明一个变量
static Multimap<String, Object> multiList = ArrayListMultimap.create();
并添加像
这样的值 multiList.put(**key1**,value1)
multiList.put(**key1**,value1)
multiList.put(**key2**,value3)
现在,我传递的请求是这样的
Response response = RestAssured.given().header("Cookie", SessionDetailsCedar.CSESSIONID).and().header("X-CSRFToken", SessionDetailsCedar.CSRF).and().header("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8").and().header("Connection", "keep-alive").formParameters(<b>multiList</b>).when().post(<b>Some URL</b>);
我的问题是 formParameters(Map) 仅使用 Map 作为参数,而我想改用 Multimap
坏消息是这不是真的可以接受:
在RFC 3986的3.4节查询中,没有定义多值参数。
似乎有可能的好消息:
1 Map 和 Set
com.ning.http.client.FluentStringsMap map = new com.ning.http.client.FluentStringsMap();
map.add("name", "one_value");
Set<String> values= new HashSet<String>();
values.add("1");
values.add("2");
values.add("3");
values.add("4");
map.add("values", values);
参见:How to send request parameters with same parameter-name
2 如果你的值很少,你可以通过几个列表或可变参数来放置:
https://code.google.com/p/rest-assured/wiki/Usage#Parameters
. param("myList", "value1", "value2"). ..
List<String> values = new ArrayList<String>();
values.add("value1");
values.add("value2");
.param("myList", values). ..
https://code.google.com/p/rest-assured/wiki/Usage#Static_imports
3 另一种解决方案是使用 JSON.
Multimap 不能转换为Map,因为它违反了Map 的定义。在这种情况下,我认为您应该使用 REST assured 的另一种方法 formParam 方法,如下例所示:
RestAssured.
given().
contentType("application/x-www-form-urlencoded; charset=ISO-8859-1").
formParam("key1", value1).
formParam("key1", value2).
formParam("key2", value3).
when().
post("Some URL");