Кодировать & в значении параметра запроса в строковом URL-адресе в java

У меня есть функция, которая получает строковый 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-адрес, у меня нет доступа к тому, как он передается в функцию.

Символом может быть любой символ, в большинстве случаев это будет &, и может быть несколько параметров со сценарием аналогичного значения.

Всегда ли это один и тот же параметр или он может быть в значении любого параметра?

Federico klez Culloca 08.04.2021 10:06

Может быть любым параметром. А также может быть много похожих параметров или других символов тоже по значению

Akshay Borse 08.04.2021 10:09

Вы должны исправить вызывающего абонента на свой метод. Вы начинаете с недопустимого ввода - как вы когда-нибудь собираетесь надежно определить, какой & в любой входной строке следует исправить?

DuncG 08.04.2021 13:54

@DuncG Я упомянул, что у меня нет доступа к вызывающему абоненту. Я получаю полный URL-адрес в строковом формате, и мне нужно с этим разобраться.

Akshay Borse 08.04.2021 16:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
41
1

Ответы 1

вы можете использовать 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 должным образом.

Akshay Borse 08.04.2021 10:48

Другие вопросы по теме