REST保证不接受大括号

时间:2019-09-29 04:07:31

标签: java rest-assured

无法在我的端点URL中使用查询

我尝试使用。queryParams(),但似乎不起作用。我收到以下错误

  

java.lang.IllegalArgumentException:无效数量的路径参数。   预期的1为0,未定义的路径参数为:   cycle-id [12345]; test.name [Validate_REST_Assured_Curly_Brackets]。

有人可以帮我吗

almQuery=https://{almurl}/qcbin/rest/domains/{domain}/projects/{project}/test-instances?query={cycle-id[12345];test.name[Validate_REST_Assured_Curly_Brackets]}

Response response = RestAssured.given().relaxedHTTPSValidation()
.contentType("application/xml")
.cookie(cookie)             .get(getEntityEndpoint(almQuery)).then().extract().response();

2 个答案:

答案 0 :(得分:0)

这是RestAssured实现的工作方式。每当您的网址包含花括号时,它都将使用path参数。例如,如果您的网址包含{project},则应提供名称为project的路径参数。

唯一避免这种情况的方法是在网址中手动编码{}字符。您可以使用URLEncoder.encode(),但会弄乱其他字符,因此请尝试简单地将所有{}替换为编码后的值:

public class App {

  public static void main(String[] args) {
    String url = "http://www.example.com/path/{project}";
    String encoded = encodeUrlBraces(url);
    RestAssured.given()
        .when()
        .get(encoded);
  }

  private static String encodeUrlBraces(String url) {
    return url.replaceAll("\\{", "%7B").replaceAll("}", "%7D");
  }
}

这是Rest Assured创始人和贡献者https://github.com/rest-assured/rest-assured/issues/682

的答案。

答案 1 :(得分:0)

感谢bhusak的回应。我能够通过将查询参数传递给.queryParam()来解决此问题,并且解决了问题

相关问题