使用Multimap而不是Map来发送Rest Assured Call的参数

时间:2015-12-30 09:32:12

标签: java multimap rest-assured

我宣布变量

    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)在我想使用Multimap时只使用Map作为参数

2 个答案:

答案 0 :(得分:0)

坏消息是不可接受的:

RFC 3986中的

,在3.4查询中,没有具有多个值的参数的定义。

好消息似乎有可能:

1 a Map and Set&lt;字符串&gt;应该做的工作:

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如果您的值很少,可以使用多个List或varargs:

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。

答案 1 :(得分:0)

Multimap无法转换为Map,因为它与Map的定义相对应。在这种情况下,我认为您应该使用REST保证的另一种方法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");