如何在网址中设置“{”等字符?

时间:2016-04-13 19:26:59

标签: rest-assured

我需要传递以下网址:

  

https://api.softlayer.com/rest/v3/SoftLayer_Account/getVirtualGuests?objectFilter= { “virtualGuests”:{ “主机名”:{ “操作”: “hostnameTest”}}}

我尝试了不同的方式,但它不起作用,这是我的代码的一部分:

System.out.println(
                given().
                 when().get("https://api.softlayer.com/rest/v3/SoftLayer_Account/getVirtualGuests?objectFilter={\"virtualGuests\":{\"hostname\":{\"operation\":\"hostnameTest\"}}}").asString());

    }

例外:

java.lang.IllegalArgumentException: Invalid number of path parameters. Expected 1, was 0. Undefined path parameters are: "virtualGuests":{"hostname":{"operation":"hostnameTest".

根据例外情况,我认为我应该使用路径参数,我试过但是我没有成功。

此外,我尝试将 {替换为字符转义码%7B

有什么想法吗?提前致谢

2 个答案:

答案 0 :(得分:0)

我刚试过这个:

encodeURI('{"virtualGuests":{"hostname":{"operation":"hostnameTest"}}}')

它给了我:

"%7B%22virtualGuests%22:%7B%22hostname%22:%7B%22operation%22:%22hostnameTest%22%7D%7D%7D"

答案 1 :(得分:0)

非常感谢塞巴斯蒂安和罗伯特!

我没有成功使用encodeURI,但我使用 queryParam 并且它可以正常工作

given().
                        queryParam("objectFilter", "{\"virtualGuests\":{\"hostname\":{\"operation\":\"hostnameTest\"}}}").
                 when().get("/SoftLayer_Account/getVirtualGuests")
                .then().assertThat().body("id", hasItem(1111111));   

非常感谢!