改型路径编码除字符外?

时间:2018-11-06 12:30:56

标签: java android kotlin retrofit retrofit2

我在下面使用改造和界面

 @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 。 反正吗?

3 个答案:

答案 0 :(得分:2)

@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");

答案 1 :(得分:1)

不要使用Path,您可以在方法中使用@Query,它不会将?转换为%3F。 您可以将方法更改为

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

例如,您的值为“ aolphn”,此代码将被访问

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

?将自动添加。

答案 2 :(得分:-1)

我找到了解决方案,必须使用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())