Модифицировать путь кодирования, кроме символа?

Я использую модификацию и мой интерфейс ниже

 @GET("{link}")
 fun search(@Path(value = "link", encoded = true) link: String?): Call<Any>

Нужно ли использовать закодированный для всех ссылок, кроме символа "?".

Пример:

Ссылка -> / api / search? & Query=تست

Закодированная ссылка путем модернизации -> api / search% 3F & query=%D8%AA%D8%B3%D8%AA

Мне нужна эта ссылка-> api / search? & Query=%D8%AA%D8%B3%D8%AA

Мне не нужно преобразовывать символ "?" до % 3F. делать в любом случае?

2 ответа

Решение

Я нахожу решение, должен использовать Interceptor для запроса.

class RemoveCharacterInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {
        val request = chain.request()
        val path = request.url().toString()

        val string = path.replace("%3F", "?") // replace

        val newRequest = request.newBuilder()
                .url(string)
                .build()

        return chain.proceed(newRequest)
    }

}

и добавить в httpClient

val httpClient = OkHttpClient.Builder()
httpClient.addInterceptor(RemoveCharacterInterceptor())

Для этого следует использовать @Url вместо @Path

@GET
Call<ResponseClass> list(@Url String url);

Он отлично работает с полным URL-адресом и путем, который затем используется с базовым URL-адресом.

Retrofit retrofit = Retrofit.Builder()  
  .baseUrl("https://website.com/");
  .build();

MyService service = retrofit.create(MyService.class);  
service.exampleCall("https://another-website.com/example");
service.anotherExampleCall("/only/path/part");

Не используйте путь, вы можете использовать @Query в вашем методе это не будет конвертировать ? в %3F, Вы можете изменить свой метод на

@GET("api/serach")
fun search(@Query("query") value: String?): Call<Any>

Например, ваше значение "aolphn", этот код будет

http(s)://xxx/api/search?query=aolphn

? будет добавлено автоматически.

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