Java Rest Assured завершил обработку моего запроса на получение - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь подключиться к 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' из кодировки Net и выглядит правильно вresource, но с уверенностью затем преобразует все «%» в «% 25», что делает JSON недействительным ({становится% 257B).
  • «+» в заголовке преобразуется в «%20 'по какой-то причине.Хотя технически то же самое, нет никаких причин «исправлять» это.

Если я не кодирую значения при создании ресурса, вызов get завершится неудачно, потому что он видит пробелы.

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

Так, как правильно кодировать значения?Или убедитесь, что вы не уверены в том, что отправили строку, которую отправили?

1 Ответ

0 голосов
/ 26 ноября 2018

Комментарий @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...