Spring boot 2: знак плюс (+) не кодируется в параметре запроса

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

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

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

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

4
0
3 747
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из весенние документы и из этого проблема вы должны «вызывать кодирование до, а не после расширения переменных URI». НАПРИМЕР.

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

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

If + character is allowed in URL then why does it get decoded as white space rather than the + character itself

Из w3schools:

URLs cannot contain spaces. URL encoding normally replaces a space with a plus (+) sign or with %20.

Я все еще думаю об одном моменте. Если в URL-адресе разрешен символ +, то почему он декодируется как пробел, а не сам символ +. Если вы можете ответить. Спасибо.

Sachin 13.03.2019 10:32

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