2017-03-29 17 views
1

我試圖將請求發送到使用分號的API(;)代替號(&)查詢參數,URL請求是這樣的:改造查詢,而不符號

http://api.example.com/path/?param1=p1;param2=p2 

最相似的post我在互聯網上發現建議使用另一種方法將URL部分放在一起,然後使用@Url註釋。

改裝是否包含這些情況下的解決方案?

謝謝。

+0

咦?聽起來像你的API非常非常破碎。你確定它們不只是矩陣參數嗎? – chrylis

+0

@chrylis老實說,我不知道! –

+1

似乎已經有一個問題與我的問題有關:https://github.com/square/retrofit/issues/450 –

回答

1

可以使用Interceptor來將'&'改爲';'來重寫URL。棘手的部分是以不會導致URL無效的方式進行。

new Interceptor() { 
    Response intercept(Chain chain) throws IOException { 
     HttpUrl originalUrl = chain.request().url(); 
     String query = originalUrl.encodedQuery(); 
     if (query == null) { 
      return chain.proceed(chain.request()); 
     } else { 
      Request.Builder builder = chain.request().newBuilder(); 
      builder.url(originalUrl.newBuilder() 
       .encodedQuery(query.replace('&', ';')) 
       .build()); 
      return chain.proceed(builder.build()); 
     } 
    } 
}; 

這OkHttp(聯網庫,權力改造)攔截器會檢查給定的URL具有查詢,並用替換任何「&」在查詢部分「;」。從理論上講,這應該按照您的指定行事。

可以通過自己創建OkHttpClient實例並在構建它時安裝上述Interceptor來應用。

+0

謝謝,它的工作。 –