retrofit的注解一共3種類(lèi)型,分別為網(wǎng)絡(luò)請(qǐng)求方法注解,標(biāo)記類(lèi)注解和網(wǎng)絡(luò)請(qǐng)求參數(shù)注解
- 網(wǎng)絡(luò)請(qǐng)求方法注解
- @GET
- @POST
- @PUT
- @DELETE
- @PATCH
- @HEAD
- @OPTIONS
- @HTTP
- 標(biāo)記類(lèi)注解
- @FormUrlEncoded
- @Multipart
- @Streaming
- 網(wǎng)絡(luò)請(qǐng)求參數(shù)注解
- @Header
- @headers
- @URL
- @Body
- @Path
- @Field
- @FieldMap
- @Part
- @PartMap
- @Query
- @QueryMap
詳細(xì)解釋
- 網(wǎng)絡(luò)請(qǐng)求方法注解即對(duì)應(yīng)了對(duì)應(yīng)的網(wǎng)絡(luò)請(qǐng)求方法
例如
@POST("GetWorkArea")
Observable<BaseResult<ArrayList<PDIC>>> GetWorkArea();
tips: retrofit的url分為2部分配置 一部分是我們這里的請(qǐng)求方法注解內(nèi)容GetWorkArea
還有一部分在構(gòu)建retrofit的地方
Retrofit retrofit = new Retrofit.Builder()
.client(client)
.baseUrl(baseUrl)
.addConverterFactory(ScalarsConverterFactory.create())//請(qǐng)求結(jié)果轉(zhuǎn)換為基本類(lèi)型淑廊,一般為String
.addConverterFactory(GsonConverterFactory.create())//請(qǐng)求的結(jié)果轉(zhuǎn)為實(shí)體類(lèi)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//適配RxJava2.0,
.build();
這里的baseurl以及注解請(qǐng)求方法里的url組成請(qǐng)求的url,這里的請(qǐng)求規(guī)則如下
- path是一個(gè)完整的url,則設(shè)置baseurl的時(shí)候不設(shè)置,請(qǐng)求的url就是path
- path是絕對(duì)路徑,如 path="/GetWorkArea" 那么請(qǐng)求的url為baseurl的host地址+/path,例如baseurl為 http://www.testhost.com/a/b/c/d ,組合出來(lái)的url為 http://www.testhost.com/GetWorkArea
- path為相對(duì)路徑,如path="GetWorkArea" 如baseurl為 http://www.testhost.com/a/b/c/d/,組合出來(lái)的路徑為http://www.testhost.com/a/b/c/d/GetWorkArea
- path為相對(duì)路徑,baseurl為文件形式,例如baseurl為http://www.testhost.com/a/b.png,path為"c.png"組合出來(lái)為http://www.testhost.com/a/c.png
一般使用第三種方式...
@HTTP()是一個(gè)例外 ,可以代替其他的注解使用方式如下
@HTTP(method = "GET", path = "blog/{id}", hasBody = false)
-
標(biāo)記類(lèi)
- @FormUrlEncoded 作用:表示發(fā)送form-encoded的數(shù)據(jù)(每個(gè)鍵值對(duì)需要用@Filed來(lái)注解鍵名,隨后的對(duì)象需要提供值)
- @Multipart 作用:表示發(fā)送form-encoded的數(shù)據(jù)(適用于 有文件 上傳的場(chǎng)景) (每個(gè)鍵值對(duì)需要用@Part來(lái)注解鍵名特咆,隨后的對(duì)象需要提供值季惩。 )
- @Streaming 表示請(qǐng)求的數(shù)據(jù)以流的形式返回(使用于數(shù)據(jù)較大,如果沒(méi)有該注解,數(shù)據(jù)會(huì)全部加載到內(nèi)存,之后取數(shù)據(jù)也是從內(nèi)存中取)
-
網(wǎng)絡(luò)請(qǐng)求參數(shù)
- @Header&@Headers 添加請(qǐng)求頭 &添加不固定的請(qǐng)求頭
// @Header @GET("user") Call<User> getUser(@Header("Authorization") String authorization) // @Headers @Headers("Authorization: authorization") @GET("user") Call<User> getUser()
- @Body
作用:以 Post方式 傳遞 自定義數(shù)據(jù)類(lèi)型 給服務(wù)器(如果提交的是一個(gè)Map,那么作用相當(dāng)于 @Field ) - @Field & @FieldMap 發(fā)送 Post請(qǐng)求 時(shí)提交請(qǐng)求的表單字段(必須要和@FormUrlEncoded配合使用)
- @Part & @PartMap, 與@Field的區(qū)別:功能相同腻格,但攜帶的參數(shù)類(lèi)型更加豐富画拾,包括數(shù)據(jù)流,所以適用于 有文件上傳 的場(chǎng)景(與 @Multipart配合做上傳等)
- @Query和@QueryMap ,作用:用于 @GET 方法的查詢(xún)參數(shù)(Query = Url 中 ‘?’ 后面的 key-value)會(huì)拼接到url上
- @Path 使用url中的缺省值,例如
@GET("users/{user}/repos") Call<ResponseBody> getBlog(@Path("user") String user );
相當(dāng)于是補(bǔ)足url
- @Url 當(dāng)有@url的時(shí)候 @get的參數(shù)就可以省略
@GET Observable<TestBean> testAction(@Url String url);