Избегайте проверки URI для http-вызова в Java - PullRequest
2 голосов
/ 11 мая 2019

У меня http-вызов, где параметр запроса должен содержать JSON с такими символами, как { } [ ] , а не .

Пример URL:

http://server.com?queryParam={%22address1%22%3A%2277+tehama%22%2C%}

, в этом случае { } следует передавать без кодировки.

Я знаю, что согласно Ссылка на кодировку URL эти символы должны быть закодированы, но это сторонний API, и он не может быть изменен каким-либо образом.

До сих пор я пытался сделать такой вызов с помощью:

  • Spring RestTemplate
  • Spring org.springframework.web.reactive.function.client.WebClient
  • Java9 java.net.http.HttpClient

Все эти клиенты проходят проверку URI и не позволяют совершать такой вызов.Клиенты Spring рассматривают {*} как имя параметра и терпят неудачу с исключением, а java HttpClient терпит неудачу с java.lang.IllegalArgumentException: Illegal character in query.

Есть ли способ отключить проверку для упомянутых клиентов или какого-либо другого http-клиента (возможно, низкого уровня)которые позволят такие звонки?

1 Ответ

1 голос
/ 01 июня 2019

Найден способ добиться этого с помощью java.net.URL

Пример кода:

final URL url = new URL("http://server.com?queryParam={%22address1%22%3A%2277+tehama%22%2C%}");
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");

final Response response;
try (InputStream inputStream = connection.getInputStream()) {
   response = objectMapper.readValue(inputStream, Response.class);
} catch (final Exception e) {
   log.error("Error when calling API", e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...