Java Rest Assured过度处理我的get请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Rest Assured过度处理我的get请求相关的知识,希望对你有一定的参考价值。

我正在尝试连接到REST API(不是我自己的,所以我无法解决他们的问题)但是当我发送GET请求时,Rest Assured正在重新处理我的URI,导致调用失败。

以下是构建请求的代码:

Call rest = new Call("https://rest.test.com"); // Custom class to simplify REST calls.

JSONObject searchCriteria = new JSONObject();
searchCriteria.put("textSearchType", "SEARCHNAME");
searchCriteria.put("textSearchString", "joe blow");

String header = "Lead Inline Quick Search";

StringBuilder resource = new StringBuilder("/api/v1/search?");
resource.append("searchCriteria=")
        .append(URLEncoder.encode(searchCriteria.toString()))
        .append("&header=")
        .append(URLEncoder.encode(header));

System.out.println("REST call: " + resource.toString());

rest.get(resource.toString(), 200); // Perform a get on the query, expect a 200 response

当我查看输出时,请求是正确的:

REST call: /api/v1/search?searchCriteria=%7B%22textSearchString%22%3A%22joe+blow%22%2C%22textSearchType%22%3A%22SEARCHNAME%22%7D&header=Lead+Inline+Quick+Search

但是,当我查看Rest Assured的调试时,它会重新处理导致调用失败的请求:

Request method: GET
Request URI: https://rest.test.com/api/v1/search?searchCriteria=%257B%2522textSearchString%2522%253A%2522joe%2Bblow%2522%252C%2522textSearchType%2522%253A%2522SEARCHNAME%2522%257D&header=Lead%2BInline%2BQuick%2BSearch

注意:

  • '{'从网络编码正确转换为'%7B'并在resource中正确显示,但Rest Assured然后进一步将所有'%'转换为'%25',使得json无效({变为%257B)。
  • 由于某种原因,标题中的“+”被转换为'%20'。虽然技术上相同,但没有理由“修复”它。

如果我在构建资源时不对值进行编码,则get调用将失败,因为它会看到空格。

IllegalArgumentException-Invalid number of path parameters. Expected 1, was 0. Undefined path parameters are: "textSearchString":"joe blow","textSearchType":"SEARCHNAME".

那么对值进行编码的正确方法是什么?或者让Rest Rest确保不要用它发送的字符串来猴子?

答案

来自@Hypino的评论让我走上正轨。

.urlEncodingEnabled(false)添加到.given()并没有改变结果(调用仍然是双重处理)。但是将.setUrlEncodingEnabled(false)添加到RequestSpecBuilder()给出了正确的结果。

private RequestSpecBuilder build = new RequestSpecBuilder().setUrlEncodingEnabled(false);

记录的呼叫和实际呼叫现在是相同的:

REST call: /api/v1/search?searchCriteria=%7B%22textSearchString%22%3A%22joe+blow%22%2C%22textSearchType%22%3A%22SEARCHNAME%22%7D&header=Lead+Inline+Quick+Search

Request method: GET
Request URI: https://rest.test.com/api/v1/search?searchCriteria=%7B%22textSearchString%22%3A%22joe+blow%22%2C%22textSearchType%22%3A%22SEARCHNAME%22%7D&header=Lead+Inline+Quick+Search

以上是关于Java Rest Assured过度处理我的get请求的主要内容,如果未能解决你的问题,请参考以下文章

0312 java接口测试三棱军刺rest-assured

Rest Assured 不使用自定义 ObjectMapper

java 使用Rest Assured和Spring Boot来休息Api文档

是否可以使用 Java Stream api 重写带有 Rest-Assured 请求尝试的 WHILE 循环

Rest-Assured 测试框架

rest-assured的对象映射(Object Mapping)