Как правильно кодировать знак плюса (+) при выполнении запроса с Webflux WebClient?JAVA

Программисты JAVA общаются здесь
Anonymous
Как правильно кодировать знак плюса (+) при выполнении запроса с Webflux WebClient?

Сообщение Anonymous »

Я пытаюсь отправить международный форматированный номер телефона, используя Spring Webflux WebClient и прочитать этот номер телефона через другое приложение, также используя WebFlux.

Код: Выделить всё

webClient = WebClient.builder()
.baseUrl(baseUrl)
.build();

return webClient
.get()
.uri(uriBuilder -> uriBuilder
.path("/endpoint")
.queryParam("phone-number", "+33612345678")
.build()
)
.retrieve()
.bodyToMono(String.class);
< /code>
К сожалению, где -то между этим вызовом и приемником знак плюс заменяется пространством.
конечная точка получает: "33612345678" как строка.+--------+-------------------------------------------------+----------------+
|00000000| 47 45 54 20 2f 63 75 73 74 6f 6d 65 72 73 3f 70 |GET  /endpoint?p|
|00000010| 68 6f 6e 65 2d 6e 75 6d 62 65 72 3d 2b 33 33 36 |hone-number=+336|
|00000020| 31 32 33 34 35 36 37 38 26 6f 6e 6c 79 2d 72 65 |12345678
< /code>
Я попытался кодировать телефонное номера самостоятельно: < /p>
.queryParam("phone-number", UriUtils.encode("+34612345678", StandardCharsets.UTF_8))
< /code>
и журнал Нетти показывает: < /p>
+--------+-------------------------------------------------+----------------+
|00000000| 47 45 54 20 2f 63 75 73 74 6f 6d 65 72 73 3f 70 |GET  /endpoint?p|
|00000010| 68 6f 6e 65 2d 6e 75 6d 62 65 72 3d 25 32 35 32 |hone-number=%252|
|00000020| 42 33 34 36 31 32 33 34 35 36 37 38 20 48 54 54 |B34612345678 HTT|
Кажется, что номер телефона кодируется дважды. Кодирование Uribuilder: < /p>

Код: Выделить всё

 DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(baseUrl);
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
this.webClient = WebClient.builder()
.baseUrl(baseUrl)
.uriBuilderFactory(factory)
.build();
и наличие моей пользовательской кодирования uriutils.encode ("+34612345678", standardcharsets.utf_8)
В этом случае журналы Netty выглядят как ожидаемые:
+--------+-------------------------------------------------+----------------+
|00000000| 47 45 54 20 2f 63 75 73 74 6f 6d 65 72 73 3f 70 |GET /endpoint?p|
|00000010| 68 6f 6e 65 2d 6e 75 6d 62 65 72 3d 25 32 42 33 |hone-number=%2B3|
|00000020| 34 36 31 32 33 34 35 36 37 38 20 48 54 54 50 2f |4612345678 HTTP/|
< /code>
И, конечно, конечная точка, получающая номер телефона GET: «+33612345678» < /p>
Чтобы подвести итог, похоже, что сигнал URIBUILDER кодирует определенный знак, как «%», но не кодирует знак «+». https://docs.spring.io/spring-framework ... i-encoding

Подробнее здесь: https://stackoverflow.com/questions/648 ... bflux-webc

Вернуться в «JAVA»