Android —— Retrofit 請求註解分析

Android 請求方式無非就是 POST、PUT、DELETE以及HEAD 這幾種,
Retrofit 中的註解:
1. GET ———-查找資源(查)
2. POST ——–修改資源(改)
3. PUT ———-上傳文件(增)
4. DELETE —-刪除文件(刪)
5. HEAD——–只請求頁面的首部

@QueryMap、@Path、@Body、@FormUrlEncoded/@Field、@Header/@Headers。我們來看一下他們的區別:

@Query(GET請求):

用於在url後拼接上參數,例如:

@GET("book/search")
Call<Book> getSearchBook(@Query("q") String name);//name由調用者傳入

相當於:

@GET("book/search?q=name")
Call<Book> getSearchBook();
@QueryMap(GET請求):

當然如果入參比較多,就可以把它們都放在Map中,例如:

@GET("book/search")
Call<Book> getSearchBook(@QueryMap Map<String, String> options);
@Path(GET請求):

用於替換url中某個字段,例如:

@GET("group/{id}/users")
Call<Book> groupList(@Path("id") int groupId);

像這種請求接口,在group和user之間有個不確定的id值需要傳入,就可以這種方法。我們把待定的值字段用{}括起來,當然 {}裏的名字不一定就是id,可以任取,但需和@Path後括號裏的名字一樣。如果在user後面還需要傳入參數的話,就可以用Query拼接上,比如:

@GET("group/{id}/users")
Call<Book> groupList(@Path("id") int groupId,@Query("sort") String sort);

當我們調用這個方法時,假設我們groupId傳入1,sort傳入“2”,那麼它拼接成的url就是group/1/users?sort=2,當然最後請求的話還會加上前面的baseUrl。

@Body(POST請求):

可以指定一個對象作爲HTTP請求體,比如:

@POST("users/new")
Call<User> createUser(@Body User user);

它會把我們傳入的User實體類轉換爲用於傳輸的HTTP請求體,進行網絡請求。

@Field(POST請求):

用於傳送表單數據:

@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

注意開頭必須多加上@FormUrlEncoded這句註釋,不然會報錯。表單自然是有多組鍵值對組成,這裏的first_name就是鍵,而具體傳入的first就是值啦。

@Header/@Headers(POST請求):

用於添加請求頭部:

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)

表示將頭部Authorization屬性設置爲你傳入的authorization;當然你還可以用@Headers表示,作用是一樣的比如:

@Headers("Cache-Control: max-age=640000")
@GET("user")
Call<User> getUser()

當然你可以多個設置:

@Headers({
    "Accept: application/vnd.github.v3.full+json",
    "User-Agent: Retrofit-Sample-App"
})
@GET("user")
Call<User> getUser()

好了,這樣我們就把上面這個RetrofitService 接口類解釋的差不多了。

原文地址 教你一步步搭建MVP+Retrofit+RxJava網絡請求框架

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章