我有改装要求
@GET("{link}")
suspend fun getFilePart(@Path(value = "link") link: String): Deferred<NetworkResponse<ResponseBody, NetworkError>>
当我调用它时,我会传递一个“链接”
val base = if (BuildConfig.DEBUG) BuildConfig.TRANSFER_URL_DEBUG else BuildConfig.TRANSFER_URL
apiManager.appApiService(base).getFilePart(it.link)
假设链接类似于“https://storage_dev.example.com/10002/6d197e1e57e37070760c4ae28bf1...”但是在 Logcat 中我看到一些字符被 urlEncoded。 例如
正如我所看到的,链接是一个字符串,其中有许多字符被编码为“&”已变成“%3F”
我怎样才能防止这种情况发生?
您可以将
encoded = true
添加到您的请求参数中以告诉改造不要再次编码它:
/**
* Specifies whether the parameter {@linkplain #value() name} and value are already URL encoded.
*/
boolean encoded() default false;
例子:
@Path(value = "link", encoded = true)
如果您的链接包含 baseurl 部分,您应该使用 @Url 来避免该问题
@GET
suspend fun getFilePart(@Url link: String): Deferred<NetworkResponse<ResponseBody, NetworkError>>
我想我迟到了,但是这就是我解决它的方式..
我的问题是 containes 的 url
"
所以请求 url 它被编码然后看起来像这样 domain.com/api/%22SOME_URL_%22
只需添加拦截器来捕获请求并对其进行解码。
if(it.request().url().toString().contains("api/MY_SUB_DOMAIN")){
val newUrl = java.net.URLDecoder.decode( it.request().url().toString(),
StandardCharsets.UTF_8.name()) // <--- This is your main solution (decode)
.replace("\"", "") // <---- I had to do this to remove parenthasis "
requestBuilder.url(newUrl) // <--- DONT FORGET TO ASSAIGN THE NEW URL
}