Special character = gets converted into %3D after calling API using retrofit

Viewed 108

I want to pass = sign in request params as string. It coverts into %3D upon calling api.

1 Answers

You need to use custom interceptor as below:

class MyInterceptor: Interceptor {

  override fun intercept (chain: Interceptor.Chain): Response {

     val request = chain.request()
     val unEncodedStringUrl = request.url.toString().replace("%3D", "=")
     var newRequest = request.newBuilder().url(unEcodedStringUrl).build()

     return chain.proceed(newRequest)

  }

}

And then use it for OkHttpClient of the retrofit:

fun getOkHttpClient(
    myInterceptor: MyInterceptor,
    loggingInterceptor: HttpLoggingInterceptor
): OkHttpClient {
    return OkHttpClient().newBuilder().addInterceptor(myInterceptor).also {
        if (BuildConfig.DEBUG) {
            it.addInterceptor(loggingInterceptor)
        }
    }.build()
}

Finally, use this OkHttpClient for retrofit as below:

fun getRetrofit(moshi: Moshi): Retrofit {
    return Retrofit.Builder()
        .baseUrl(StaticConstants.baseUrl)
        .client(getOkHttpClient())
        .addConverterFactory(
            MoshiConverterFactory.create(moshi)
        )
        .build()
}
Related