У меня есть функция, которая получает строковый URL-адрес, подобный этому
String url = http://www.example.com/site?a=abc&b=qwe & asd
Здесь «qwe & asd» - это одно значение запроса.
Я хочу, чтобы этот URL был закодирован в
URI url = http://www.example.com/site?a=abc&b=qwe%20%26%20asd"
Я пробовал разные методы, но не могу кодировать & в "qwe & asd", пространство кодируется до% 20, но & не кодируется до% 26.
Функция получает URL-адрес только в строковом формате и полный URL-адрес, у меня нет доступа к тому, как он передается в функцию.
Символом может быть любой символ, в большинстве случаев это будет &, и может быть несколько параметров со сценарием аналогичного значения.
Может быть любым параметром. А также может быть много похожих параметров или других символов тоже по значению
Вы должны исправить вызывающего абонента на свой метод. Вы начинаете с недопустимого ввода - как вы когда-нибудь собираетесь надежно определить, какой & в любой входной строке следует исправить?
@DuncG Я упомянул, что у меня нет доступа к вызывающему абоненту. Я получаю полный URL-адрес в строковом формате, и мне нужно с этим разобраться.




вы можете использовать URLEncoder для кодирования вашего URL, например:
URLEncoder.encode(value, StandardCharsets.UTF_8.toString())
результат будет:
http://www.example.com/site?a=abc&b=qwe+%26+asd
Кодировка URL-адреса обычно заменяет пробел знаком плюса (+) или% 20. вы можете использовать этот код для кодирования своего URL:
@SneakyThrows
private String encodeValue(String value) {
return URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
}
@Test
void urlEncodingTest(){
Map<String, String> requestParams = new HashMap<>();
requestParams.put("a", "abc");
requestParams.put("b", "qwe & asd");
String encodedURL = requestParams.keySet().stream()
.map(key -> key + " = " + encodeValue(requestParams.get(key)))
.collect(joining("&", "http://www.example.com/site?", ""));
}
если вам нужна дополнительная информация, вы можете проверить этот ссылка на сайт
Как я уже упоминал в вопросе, функция напрямую получает URL-адрес в строковом формате, у меня нет доступа к тому, как он передается. Итак, нужно решение, которое напрямую работает со строкой. Я не могу получить requestParams должным образом.
Всегда ли это один и тот же параметр или он может быть в значении любого параметра?