Я пытаюсь отправить запрос GET с некоторой строкой URL в качестве параметра, используя любой из Джерси или Resteasy
Response response = new ResteasyClientBuilder()
.build()
.target(UriBuilder.fromPath("https://foo.bar"))
.queryParam("url", "http://hostname.com/The%20URL%20with spaces.jpg")
.request()
.get();
Обе реализации отправляют
https://foo.bar?url=http%3A%2F%2Fhostname.com%2FThe%20URL%20with%20spaces.jpg
Я предполагаю, что исходное пространство экранируется с помощью %20
, а оригинальное %20
дважды экранируется в параметре запроса.
Но это не так.
Исходное пространство и %20
смешиваются, и на стороне сервера я получаю неэкранированную строку со всеми %20
, преобразованными в пробелы, и строка разбивается.
Согласно исходному коду Resteasy , он «сохраняет закодированные значения«% ... »и параметры шаблона без изменений». Но я не нашел ни одного слова в документации JEE об этом поведении.
Должен ли я экранировать свою строку перед добавлением ее в качестве параметра?
Какой символ экранирования я должен использовать, чтобы быть уверенным, что он экранирует все значения "%..." and template parameters
, и когда он выходит за пределы параметра, он успешно экранируется сервером?