最近開始在項目中使用Retrofit仅仆,在這里總結一下Retrofit網(wǎng)絡請求參數(shù)@Path器赞、@Query、@QueryMap墓拜、@Body港柜、@Field、@FieldMap用法
初始化Retrofit
Retrofit retrofit =newRetrofit.Builder()
.baseUrl("https://fanyi-api.baidu.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
GET
樣式1(一個簡單的get請求)
@GET("News")
Call ?getItem();
樣式2(URL中有參數(shù))
http://192.168.1.1/api/News/{資訊id}
@GET("News/{newsId}")
Call?getItem(@Path("newsId")String newsId);
或
http://192.168.1.1/api/News/1/類型1
http://192.168.1.1/api/News/{資訊id}/{類型}
@GET("News/{newsId}/{type}")
Call?getItem(@Path("newsId")String newsId咳榜, @Path("type")String type);
樣式3(參數(shù)在URL問號之后)
http://192.168.1.1/api/News?newsId=1
http://192.168.1.1/api/News?newsId={資訊id}
@GET("News")
Call?getItem(@Query("newsId") String newsId);
或
http://192.168.1.1/api/News?newsId=1&type=類型1
http://192.168.1.1/api/News?newsId={資訊id}&type={類型}
@GET("News")
Call?getItem(@Query("newsId") String newsId夏醉, @Query("type") String type);
樣式4(多個參數(shù)在URL問號之后,且個數(shù)不確定)
http://192.168.1.1/api/News?newsId=1&type=類型1...
http://192.168.1.1/api/News?newsId={資訊id}&type={類型}...
@GET("News")
Call?getItem(@QueryMap Map map);
也可以
@GET("News")
Call?getItem(@Query("newsId")String newsId涌韩,@QueryMap Map map);
POST
樣式1(需要補全URL畔柔,post的數(shù)據(jù)只有一條reason)
http://192.168.1.1/api/Comments/1
http://192.168.1.1/api/Comments/{newsId}
@FormUrlEncoded
@POST("Comments/{newsId}")
Call?reportComment(@Path("newsId") String commentId,@Field("reason") String reason);
樣式2(需要補全URL,問號后加入access_token臣樱,post的數(shù)據(jù)只有一條reason)
http://192.168.1.1/api/Comments/1?access_token=1234123
http://192.168.1.1/api/Comments/{newsId}?access_token={access_token}
@FormUrlEncoded
@POST("Comments/{newsId}")
Call?reportComment(@Path("newsId") String commentId,@Query("access_token") String access_token,@Field("reason") String reason);
樣式3(需要補全URL靶擦,問號后加入access_token,post一個body(對象))
http://192.168.1.1/api/Comments/1?access_token=1234123
http://192.168.1.1/api/Comments/{newsId}?access_token={access_token}
@POST("Comments/{newsId}")
Call?reportComment(@Path("newsId") String commentId, @Query("access_token") String access_token,@Body CommentBean bean);
DELETE
樣式1(需要補全URL)
http://192.168.1.1/api/Comments/1
http://192.168.1.1/api/Comments/{newsId}
{access_token}
@DELETE("Comments/{commentId}")
Call?deleteNewsCommentFromAccount(@Path("commentId") String commentId);
樣式2(需要補全URL雇毫,問號后加入access_token)
http://192.168.1.1/api/Comments/1?access_token=1234123
http://192.168.1.1/api/Comments/{newsId}?access_token={access_token}
@DELETE("Comments/{commentId}")
Call?deleteNewsCommentFromAccount(@Path("accountId")String accountId玄捕,? ? ? ? @Query("access_token")String access_token);
PUT(這個請求很少用到,例子就寫一個)
http://192.168.1.1/api/Accounts/1
http://192.168.1.1/api/Accounts/{accountId}
@PUT("Accounts/{accountId}")
Call?updateExtras(@Path("accountId")String accountId,? ? ? ? @Query("access_token")String access_token, @Body ExtrasBean bean);
總結
@Path:所有在網(wǎng)址中的參數(shù)(URL的問號前面)嘴拢,如:
http://192.168.1.1/api/Accounts/{accountId}
@Query:URL問號后面的參數(shù)桩盲,如:
http://192.168.1.1/api/Comments?access_token={access_token}
@QueryMap:相當于多個@Query
@Field:用于POST請求,提交單個數(shù)據(jù)
@FieldMap:以map形式提交多個Field(Retrofit2.0之后添加)
@Body:相當于多個@Field席吴,以對象的形式提交
TIps
Tip1
使用@Field時記得添加@FormUrlEncoded
Tip2
若需要重新定義接口地址,可以使用@Url捞蛋,將地址以參數(shù)的形式傳入即可孝冒。
Tip3
@Path 和@Query的區(qū)別
相同點:都是請求頭中的帶有的數(shù)據(jù)
不同點:前者是請求頭中問號之前用于替換URL中變量的字段,后者是請求頭問號之后用于查詢數(shù)據(jù)的字段拟杉,作用和應用場景都不同