輕鬆搞定Retrofit不同網路請求方式的請求引數配置,Retrofit常用註解的使用
《一》四種網路請求方式:
- GET : 向伺服器發起資料請求,獲取資訊。類似於資料庫的select操作,只是查詢,不會影響資源的內容。
- POST : 向伺服器傳送資料,該請求會改變資料的種類等資源。類似於資料庫的insert操作,會建立新的內容。
- DELETE:用來刪除某一個資源。類似於資料庫的delete操作。
- PUT : 向伺服器傳送資料,從而改變資訊。類似於資料庫的update操作,用來修改內容。
《二》Retrofit通過註解的方式,配置不同的網路請求。主要涉及到@Path、@Query、@QueryMap、@Body、@Field的用法等。
假設你的BASE_URL = "http://192.168.0.1/"
1、GET請求:
(1)情形一:
@Query
僅帶查詢引數:http://192.168.0.1/weather?city=北京
@GET("weather")
Observable<WeatherEntity> getWeather(@Query("city") String city);
(2)情形二:
@Path
請求引數直接跟在請求路徑下:http://192.168.0.1/weather/北京
@GET("weather/{city_name}")
Observable<Object> getWeather(@Path("city_name") String city_name);
(3)情形三:
@Path和@QueryMap結合
此種情形用得比較少:http://192.168.0.1/weather/北京?user_id=1&user_name=jojo
@GET("weather/{city_name}")
Observable<Object> getWeather(@Path("city_name")String city_name, @QueryMap Map<String, String> queryParams);
HashMap<String, String> queryParams= new HashMap<>();
hashMap.put("user_id","1");
hashMap.put("user_name","jojo");
2、POST請求:
(1)情形一: http://192.168.0.1/comment
body引數:{"comment_id":"1","content":"我是評論","user_id":"1001"}
@Filed 方式處理
@FormUrlEncoded //使用@Field時記得新增@FormUrlEncoded
@POST("comment")
void doComments(@Field("comment_id")String comment_id, @Field("content")String content, @Field("user_id") String user_id);
@FieldMap 方式處理
@FormUrlEncoded
@POST("comment")
void doComments(@FieldMap Map<String, String> paramsMap );
通過鍵值對,以表單的形式提交:
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("comment_id","1");
hashMap.put("content","我是評論");
hashMap.put("user_id","1001");
@Body方式處理
@POST("comment")
void doComments(@Body Object reqBean);
@POST("comment")
void doComments(@Body List<Object> requestList);
(2)情形二:Retrofit檔案上傳: http://192.168.0.1/upload/
/**
* 檔案上傳
*/
@POST("upload/")
Observable<Object> uploadFile(@Body RequestBody requestBody);
只不過檔案上傳傳入的是RequestBody型別,下面是構建RequestBody的方式:
File file = new File(mFilePath); //mImagePath為上傳的檔案絕對路徑
//構建body
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("multipart/form-data"), file))
.build();
3、PUT請求:
(1)情形一:http://192.168.0.1/comment/88
@PUT("comment/{comment_id}")
void comment(@Path("comment_id") String comment_id);
(2)情形二:http://192.168.0.1/comment/88?user_id=1001
@PUT("comment/{comment_id}")
void comment(@Path("comment_id") String comment_id @Query("user_id") String user_id);
(3)情形三:http://192.168.0.1/comment/88?user_id=1001
加body引數:{"content":"我是評論","type":"1"}
此類請求的應用場景:適合於body中需要傳入多個請求引數,這樣可以將多個請求的引數欄位封裝到一個實體中,這樣就不用寫多個@Filed了。
public class RequestBean {
public String content;
public String type;
//實際中可能還有多個請求欄位
}
RequestBean requestBean = new RequestBean();
requestBean .content = "我是評論";
requestBean .type = "1";
@PUT("comment/{comment_id}")
void comment(@Path("comment_id") String comment_id @Query("user_id") String user_id @Body RequestBean reqBean);
4、DELETE請求:
假如刪除評論:http://192.168.0.1/comment/88
@DELETE("comment/{comment_id}")
void comment(@Path("comment_id") String comment_id);
其他可能的delete請求,配置方式都是類似的,這裡就不多舉例了。主要是要好好理解下面這些常用的請求引數註解的作用和用法。
綜上所述,可以歸納出上面幾個註解的用法:
@Path : 請求的引數值直接跟在URL後面時,用@Path配置
@Query: 表示查詢引數,以?key1=value1&key2=value2的形式跟在請求域名後面時使用@Query
@QueryMap :以map的方式直接傳入多個鍵值對的查詢引數
@Field: 多用於post請求中表單欄位,每個@Field後面,對應一對鍵值對。
@FieldMap :以map的方式傳入多個鍵值對,作為body引數
@Body: 相當於多個@Field,以物件的形式提交
注意:Filed和FieldMap需要FormUrlEncoded結合使用,否則會拋異常!
更多配置URL請求路徑的註解的瞭解可以參考:
Retrofit網路請求引數註解
Retrofit常用註解解釋
最後,附上我的一個Kotlin編寫+元件化開發的開源專案Designer
Kotlin+元件化開發實踐—開源專案Designer-App
Designer專案算是傾注了我蠻多心血了,每個頁面和功能都當成是上線的App來做,App的logo還特地做了UI設計?力求做到精緻和完善,其中還包括了很多自己專案開發中的經驗彙總和對新技術的探索和整合,希望對各位讀者有所幫助,歡迎點個star,follow,或者給個小心心,嘻嘻?也可以分享給你更多的朋友一起學習,您的支援是我不斷前進的動力。如果有任何問題,歡迎在GitHub上給我提issue或者留言。
相關文章
- 輕鬆搞定Retrofit不同網路請求方式的請求引數配置,及常用註解使用
- Retrofit請求引數註解欄位說明
- 使用retrofit進行網路請求
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- RxJava + Retrofit完成網路請求RxJava
- Retrofit網路請求原始碼解析原始碼
- 使用Retrofit+RxJava實現網路請求RxJava
- Retrofit原始碼解析之網路請求原始碼
- retrofit網路請求框架的地址及方法地址框架
- OkHttp、rxJava、Retrofit聯合網路請求(一)HTTPRxJava
- OkHttp、rxJava、Retrofit聯合網路請求(二)HTTPRxJava
- RxJava+Retrofit+Gson實現網路請求RxJava
- 網路請求框架之Retrofit2.0基本講解框架
- 分分鐘使用Retrofit+Rxjava實現網路請求RxJava
- Retrofit統一新增post請求的預設引數
- Retrofit2/Rxkotlin網路請求的封裝Kotlin封裝
- Android小知識-剖析Retrofit中網路請求的兩種方式Android
- Retrofit+Rxjava的資料請求RxJava
- Android小知識-剖析Retrofit中的網路請求流程以及相關引數Android
- Retrofit2.5怎麼做到網路請求的處理的?
- 原始碼分析Retrofit請求流程原始碼
- Retrofit+okhttp+Rxjava封裝網路請求工具類HTTPRxJava封裝
- Kotlin中Retrofit網路請求簡單封裝Kotlin封裝
- Retrofit + Kotlin + MVVM 的網路請求框架的封裝嘗試KotlinMVVM框架封裝
- Retrofit 動態引數(非固定引數、非必須引數)(Get、Post請求)
- 如何優雅地取消Retrofit請求?
- Android RxJava2+Retrofit2搭建網路請求框架AndroidRxJava框架
- Android使用Kotlin+Retrofit+Rxjava實現簡單的網路請求AndroidKotlinRxJava
- 有趣的請求引數/請求頭
- Kotlin + 協程 + Retrofit + MVVM優雅的實現網路請求KotlinMVVM
- Retrofit + RxJava + OkHttp 讓網路請求變的簡單-基礎篇RxJavaHTTP
- Retrofit + RxJava + OkHttp 讓網路請求變的簡單-封裝篇RxJavaHTTP封裝
- request的請求引數獲取方式
- Android中用Kotlin Coroutine(協程)和Retrofit進行網路請求和取消請求AndroidKotlin
- RxJava+Retrofit2搭建網路請求元件完整配置、示例程式碼及流程梳理RxJava元件
- 基於RxJava2+Retrofit+RxCache的網路請求封裝 | 掘金技術徵文RxJava封裝
- Android中Retrofit框架的基礎使用(請求資料並解析)Android框架
- 全面分析前端的網路請求方式前端