1. 程式人生 > >Retrofit 請求引數型別

Retrofit 請求引數型別

Retrofit 請求網路時,使用的okhttp框架,所以除了Retrofit api 通過註解的方式新增引數型別外,最後都是進入到 了okhttp來處理。

四大型別:紅色部分為新增部分

http://163.223.67.88/car/getUser/2

http://163.223.67.88/car/getUser/2?name="malei"&sex="man"

http://163.223.67.88/car/getUser/

json請求體: {"name":"malei","sex":"man"}

http://163.223.67.88/car/getUser/

表單請求體: name = malei & sex=man


在處理retrofit的api介面時,retrofit有幾種請求體,如下:

post部分:

當我們要進行網路通訊的時候,要不處理url,要麼處理請求體,比如一個url我們需要動態的新增引數,

就可以通過通過@path 我們可以補全url

例如: @path("id") int id;  ----- > http://123.23.23.2/api/malei/ {id}

當我們需要給url新增引數時,可以通過@query

例如: @path("id") int id,@Query("name") String name  ----- > http://123.23.23.2/api/malei/ {id}?name={name}

如果url?後面新增的不止一個引數的話,我們可以使用@QueryMap:相當於多個@Query

接下來我們在給請求新增一個json請求體,可以通過@Body

@path("id") int id,@Query("name") String name, @Body Bean bean

通過@Body 可以新增多個引數,如果只傳一個引數的話,可以使用@Field

使用@Field時記得新增@FormUrlEncoded

這裡重點說下,通過@Body 新增的請求體,我們是沒有辦法在網路攔截的時候獲取到請求體的。

除了通過@Body 新增json格式的請求引數外,還可以使用@FieldMap來傳遞引數,如下:

@FieldMap Map<String,String> map ------> name = malei & sex=gender

如果你想要傳遞的引數不多的話,就可以使用@Field,如下:

@Field("name") String name,@Field("sex") String sex ------> name = malei & sex=gender

注意:使用@FieldMap和@Field的時候一定要新增@FormUrlEncoded

總結

@Path:所有在網址中的引數(URL的問號前面),如: http://102.10.10.132/api/Accounts/{accountId} @Query:URL問號後面的引數,如: http://102.10.10.132/api/Comments?access_token={access_token} @QueryMap:相當於多個@Query @Field:用於POST請求,提交單個數據 @Body:相當於多個@Field,以物件的形式提交 ,提交json

@FieldMap : map型別資料 ,新增非json