Я пытаюсь подключиться к 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".
Так, как правильно кодировать значения?Или убедитесь, что вы не уверены в том, что отправили строку, которую отправили?