В настоящее время я переношу один из своих микросервисов на весеннюю загрузку 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 . Или, пожалуйста, укажите мне правильное место, если я делаю что-то не так. Я также могу поделиться кодом, если это необходимо.
Из весенние документы и из этого проблема вы должны «вызывать кодирование до, а не после расширения переменных 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-адресе разрешен символ +, то почему он декодируется как пробел, а не сам символ +. Если вы можете ответить. Спасибо.