Spring boot 2: знак плюс (+) не закодирован в параметре запроса - PullRequest
0 голосов
/ 13 марта 2019

В настоящее время я перевожу один из моих микро-сервисов на весеннюю загрузку 2 из весенней загрузки 1.x.рассмотрим, что есть две службы A и B. Служба A вызывает остальную конечную точку службы B. В запросе служба Param передает буквенно-цифровую строку, которая также содержит символ (+) (не всегда, поскольку это случайная сгенерированная строка).Служба B сравнивает эту строку с той, которая хранится в БД, и возвращает ответ.

Я заметил, что в версии 1.x URL корректно кодируется.Ex.Если я передаю (a + b), он кодируется как% 2Bb, а в службе B он декодируется как (a + b).Однако с версией 2.x он кодируется только как (a + b), и в результате в сервисе B он декодируется как (ab) [+ декодируется в пробел]

Я использую UriComponentBuilder для создания URI и метода encode () для кодирования URI.Во время отладки я обнаружил, что символ + разрешен в URL, и поэтому он не кодируется.

У меня вопрос - Есть ли способ изменить это поведение, чтобы я получал+ как% 2B.Или, пожалуйста, укажите мне на правильное место, если я делаю что-то не так.Я могу поделиться кодом, если это необходимо.

1 Ответ

0 голосов
/ 13 марта 2019

Из документов spring и из этой проблемы вы должны «вызывать кодирование до, а не после расширения переменных URI».EG

.encode()
.buildAndExpand("New York", "foo+bar")

В ответ на комментарий:

Если в URL разрешен символ +, то почему он декодируется как пробел, а не сам символ +

Из w3schools :

URL не могут содержать пробелов.Кодировка URL обычно заменяет пробел знаком плюс (+) или% 20.

...