Quarkus rest кодирование запроса параметров клиента

#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 аннотацию, передаются ли значения в декодированном или необработанном виде.