一般我們使用Retrofit大部分場景中URL都是以注解的方式靜態(tài)聲明的空郊,即URL及path路徑都是固定不變,可變部分作為方法的參數(shù)傳入,那有一些特殊情況會要求我們再使用@GET()、或者@POST()的時候URL路徑里含有可變參數(shù),需要動態(tài)處理包竹,下面通過例子我逐個為大家分析講解。
說明:以下所有Retrofit請求的BaseURL為https://192.168.1.101/api/籍凝,接口地址為本地測試周瞎,不代表以下接口真實可用
1.GET請求
1.)普通get請求、
https://192.168.1.101/api/MovieList
2.) url中含有參數(shù)
https://192.168.1.101/api/MovieList/2018
分析:2018為動態(tài)可變部分饵蒂,代表指定idMovie声诸,api/MovieList/{movieId}
或者
https://192.168.1.101/api/MovieList/2018/comedy
分析:請求指定年下類型為comedy的電影,可變部分為年份/類型 請求地址可變部分歸類為 api/{movieId}/{type}
3.)可變參數(shù)在URL的問號之后
https://192.168.1.101/api/MovieList?movieId=10011
分析:問號之后的參數(shù)可以直接用@Query注解在作為方法參數(shù)傳入
4.) 問號后面有多個參數(shù) :
https://192.168.1.101/api/MovieList?movieId=10011&type=3
5.)問號后面有多個參數(shù)苹享,且參數(shù)個數(shù)不定
https://192.168.1.101/api/MovieList?movieId=10011&type=4&year=2013&......
分析:作為Get請求双絮,后面參數(shù)根據(jù)具體業(yè)務確定參數(shù)多少,也就是參數(shù)個數(shù)可變得问,但不確定多少個囤攀,可以借助@Querymap
2.POST請求
1.) url中含有可變參數(shù),post的數(shù)據(jù)只有一個type
https://192.168.1.101/api/MovieList/2018
分析:url中2018為可變內(nèi)容宫纬,post需要提交的參數(shù)只有一個type,2018可動態(tài)改變
2.) url中含有可變參數(shù)焚挠、問號之后需要加入token,post的數(shù)據(jù)只有一個type
https://192.168.1.101/api/MovieList/2018?token=4654551321563132fasd5645ds3
3.) url中含有可變參數(shù)漓骚、問號之后需要加入token蝌衔,post的數(shù)據(jù)為一個對象(json串)
https://192.168.1.101/api/MovieList/2018?token=4654551321563132fasd5645ds3
另外還有幾點
1.如果你的可變參數(shù)中是帶斜杠“/”的,比如
https://192.168.1.101/api/MovieList/session/token,
session和token都是可變參數(shù)蝌蹂,但session是已知的噩斟,只是可能不同的請求下要求變?yōu)椴煌淖侄危?/p>
https://192.168.1.101/api/MovieList/apiKey/token
而baseURL始終為
https://192.168.1.101/api/MovieList/
2.如果你需要用到delete請求孤个,比如
直接這樣用就會報錯java.lang.IllegalArgumentException:Non-body HTTP method cannot contain @Body
據(jù)說官網(wǎng)表示DELETE并不支持向服務器傳body
必須更換一下寫法:
@HTTP(method = "DELETE",path = "event/{uuid}",hasBody = true)
Observable<ResponseBody> delEvent(@Path(value = "uuid", encoded = true) String uuid, @Body RequestBody rb);