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