#java #encoding #quarkus #rest-client
#java #кодирование #quarkus #rest-клиент
Вопрос:
У меня есть этот quarkus rest api:
@ApplicationScoped
@RegisterRestClient(configKey = "s-api")
@RegisterProvider(LoggingFilter.class)
public interface MyClientAdapter {
@GET
@Produces(MediaType.TEXT_PLAIN)
String search(@QueryParam("lodis") double lodis,
@QueryParam("secTcn") String secTcn);
api работает хорошо, но в случае, если я передаю это значение методу ussu%os
, клиент rest кодирует его в ‘ussu%os’:
restClient.search(28322.2, "ussu%os")
В результате этого конечная точка ничего не возвращает.
Итак, мой вопрос в том, как я могу отключить эту кодировку для параметра queryparam secTcn?
Комментарии:
1. Я скопировал ваш код, и в моем случае он работает нормально! (Я ничего не знаю о вашем клиенте rest). Но попробуйте с помощью: @Consumes(MediaType. TEXT_PLAIN «;кодировка =utf-8»)
2. @Luisao добавление этой аннотации в заголовок метода не имеет никакого эффекта. Клиент quarkus rest представляет собой простой интерфейс, ориентированный на приложения. Я отредактирую свой вопрос.
Ответ №1:
Поведение вашего клиента правильное — %
знак является зарезервированным символом в URI — см. RFC3986. Поэтому любой клиент, который хочет передать %
URI, должен его закодировать, в результате %
чего он будет отправлен на сервер.
Корректное декодирование параметров запроса до их строковых литеральных значений зависит от поставщика этой конечной точки API. Если поставщиком является Jax-rs, проверьте @Encoded
аннотацию, передаются ли значения в декодированном или необработанном виде.