Модифицировать путь кодирования, кроме символа?
Я использую модификацию и мой интерфейс ниже
@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
?
будет добавлено автоматически.