@GET 表示get請(qǐng)求
@GET("url")//""一般是整個(gè)Url的后半部分
fun 方法(): Call<bean類或ResponseBody>
@POST 表示post請(qǐng)求
@POST("url")//""一般是整個(gè)Url的后半部分
fun 方法(): Call<bean類或ResponseBody>
@HTTP 比較通用
@HTTP(method = "get", path = "project/tree/json", hasBody = false)
fun 方法(): Call<bean類或ResponseBody>
@Straming 表示響應(yīng)體的數(shù)據(jù)以流的方式返回指攒,適用于返回的數(shù)據(jù)比較大聋溜,常用于下載大文件
@Streaming
@GET
fun downloadFile(@Url fileUrl: String): Call<ResponseBody>
@Headers 添加請(qǐng)求頭且不會(huì)覆蓋
@Headers("Cache-Cantrol: max-age=10000")
@GET("")
fun example1(): Call<ResponseBody>
@Header 添加請(qǐng)求頭并且會(huì)覆蓋已有的相同的請(qǐng)求頭边酒,必須提供參數(shù)滩报,如果參數(shù)為null,這個(gè)頭會(huì)被省略康震,否則會(huì)使用參數(shù)值的toString方法的返回值
@GET("")
fun example2(@Header("xx") xx: String): Call<ResponseBody>
@Body 表示以json方式請(qǐng)求 多用于post非表單請(qǐng)求
@POST("url")//""一般是整個(gè)Url的后半部分
fun 方法(@Body wanAndroidProjectBean: WanAndroidProjectBean): Call<bean類或ResponseBody>
@FormUrlEncoded配合@Field以表單的形式發(fā)送Http請(qǐng)求
@FormUrlEncoded
@POST
fun loggin(
@Field("name") name: String,
@Field("password") password: String,
@Field("array") array: Array<String>,
@FieldMap map: Map<String, String>
): Call<ResponseBody>
@Field @FieldMap配合@FormUrlEncoded以表單的形式發(fā)送Http請(qǐng)求
@FormUrlEncoded
@POST
fun loggin(
@Field("name") name: String,
@Field("password") password: String,
@Field("array") array: Array<String>,
@FieldMap map: Map<String, String>
): Call<ResponseBody>
@Url表示一個(gè)url
@GET
fun downloadFile(@Url fileUrl: String): Call<ResponseBody>
@Path
@GET("xxx/{id}/xx")
fun example4(@Path("id") id: Int): Call<ResponseBody>
@Query @QueryMap @QueryName在url后面加?name=xx&page=xx
@GET("xxx")/
fun example5(
@Query("name") name: String,
@QueryMap map: Map<String, String>,
@QueryName() page: Int
): Call<ResponseBody>
@Multipart 表示請(qǐng)求體是一個(gè)支持文件上傳的Form表單蛛芥,需要結(jié)合@Part使用
@Part 用于表單字段與@Multipart結(jié)合使用提鸟,支持三種類型:{@link RequestBody}、{@link okhttp3.MultipartBody.Part}仅淑、任意類型
@PartMap 用于表單字段與@Multipart結(jié)合使用称勋,默認(rèn)接受的類型是Map<String,RequestBody>,可用于多文件上傳
//上傳單個(gè)文件
val file = File("")
val requestBody = RequestBody.create(MediaType.parse("image/png"),file)
upload(requestBody)
@Multipart
@POST("xx/xx")
fun upload(@Part("file\";filename\";test.png") file: RequestBody): Call<ResponseBody>
@Multipart
@POST("project/upload")
fun upload2(@Part file: MultipartBody.Part): Call<RequestBody>
val file = File("")
val requestBody = RequestBody.create(MediaType.parse("image/png"),file)
val filePart = MultipartBody.Part.createFormData("上傳的key",
file.name,requestBody)
val call = wanAndroidApi.upload2(filePart)
call.execute()
//上傳多個(gè)圖片
@Multipart
@POST("project/upload")
fun upload3(@PartMap map: Map<String,RequestBody>): Call<RequestBody>
//圖片集合
val files = listOf<File>()
val map = mutableMapOf<String,RequestBody>()
files.forEach() {file ->
val requestBody = RequestBody.create(MediaType.parse("image/png"),file)
map["file\";filename=\"test.png"] = requestBody
}
wanAndroidApi.upload3(map)
@Multipart
@POST("project/upload")
fun upload4(@PartMap map: Map<String,MultipartBody.Part>): Call<RequestBody>
val files = listOf<File>()
val map = mutableMapOf<String,MultipartBody.Part>()
files.forEachIndexed { index, file ->
val requestBody = RequestBody.create(MediaType.parse("image/png"),file)
val part = MultipartBody.Part.createFormData("上傳的key${index}",file.name,requestBody)
map["上傳的key${index}"] = part
}
wanAndroidApi.upload4(map)
Multipart
上傳文件使用: Content-Type:multipart/form-data
///////上傳單張圖片//////
/**
* Multipart:表示請(qǐng)求實(shí)體是一個(gè)支持文件上傳的Form表單,需要配合使用@Part,適用于有文件 上傳的場(chǎng)景
* Part:用于表單字段,Part和PartMap與Multipart注解結(jié)合使用,適合文件上傳的情況
* PartMap:用于表單字段,默認(rèn)接受的類型是Map<String,REquestBody>涯竟,可用于實(shí)現(xiàn)多文件上傳
* Part 后面支持三種類型赡鲜,{@link RequestBody}、{@linkokhttp3.MultipartBody.Part} 庐船、任意類型银酬;
*
* @param file 服務(wù)器指定的上傳圖片的key值
* @return
*/
@Multipart
@POST("project/upload")
Call<ProjectBean> upload1(@Part("file" + "\";filename=\"" + "test.png")RequestBody file);
@Multipart
@POST("project/xxx")
Call<ProjectBean> upload2(@Part MultipartBody.Part file);
////////請(qǐng)求///////////
//上傳單個(gè)圖片1
File file = new File("");
RequestBody requestBody =RequestBody.create(MediaType.parse("image/png"),file);
wanAndroidApi.upload1(requestBody).execute();
//上傳單個(gè)圖片2
MultipartBody.Part imagePart = MultipartBody.Part.createFormData("上傳的key",file.getName(),requestBody);
wanAndroidApi.upload2(imagePart).enqueue(new Callback<ProjectBean>() {
@Override
public void onResponse(Call<ProjectBean> call,Response<ProjectBean> response) { }
@Override
public void onFailure(Call<ProjectBean> call, Throwablet) { }
});
///////上傳多張圖片//////
@Multipart
@POST("project/upload")
Call<ProjectBean> upload3(@PartMap Map<String, RequestBody> map);
@Multipart
@POST("project/xxx")
Call<ProjectBean> upload4(@PartMap Map<String, MultipartBody.Part> map);
////////使用//////////
//上傳多張圖片1
//圖片集合
List<File> files = new ArrayList<>();
Map<String, RequestBody> map = new HashMap<>();
for (int i = 0; i < files.size(); i++) {
RequestBody requestBody =RequestBody.create(MediaType.parse("image/png"), files.get(i));
map.put("file" + i + "\";filename=\"" + files.get(i).getName(),requestBody);
}
wanAndroidApi.upload3(map).execute();
//上傳多張圖片2
Map<String, MultipartBody.Part> map1 = new HashMap<>();
File file1 = new File("");
RequestBody requestBody1 =RequestBody.create(MediaType.parse("image/png"), file1);
MultipartBody.Part part1 = MultipartBody.Part.createFormData("上傳的key1",file1.getName(), requestBody1);
map1.put("上傳的key1", part1);
File file2 = new File("");
RequestBody requestBody2 =RequestBody.create(MediaType.parse("image/png"), file2);
MultipartBody.Part part2 = MultipartBody.Part.createFormData("上傳的key2",file2.getName(), requestBody2);
map1.put("上傳的key2", part2);
wanAndroidApi.upload4(map1).execute();
//////圖文混傳/////
/**
* @param params
* @param files
* @return
*/
@Multipart
@POST("upload/upload")
Call<ProjectBean> upload5(@FieldMap() Map<String, String> params,@PartMap() Map<String, RequestBody> files);
/**
* Part 后面支持三種類型,{@link RequestBody}筐钟、{@linkokhttp3.MultipartBody.Part} 揩瞪、任意類型;
*
* @param userName
* @param passWord
* @param file
* @return
*/
@Multipart
@POST("project/xxx")
Call<ProjectBean> upload6(@Part("username") RequestBody userName,@Part("password") RequestBody passWord,@Part MultipartBody.Part file);
//////使用///////
MediaType textType = MediaType.parse("text/plain");
RequestBody name = RequestBody.create(textType, "zero");
RequestBody password = RequestBody.create(textType, "123456");
File file = new File("");
RequestBody requestBody =RequestBody.create(MediaType.parse("image/png"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("上傳的key", file.getName(), requestBody);
wanAndroidApi.upload6(name, password, part).enqueue(new Callback<ProjectBean>() {
@Override
public void onResponse(Call<ProjectBean> call,Response<ProjectBean> response) {
}
@Override
public void onFailure(Call<ProjectBean> call,Throwable t) {
}
});
Streaming
未使用該注解篓冲,默認(rèn)會(huì)把數(shù)據(jù)全部載入內(nèi)存李破,之后通過(guò)流獲取數(shù)據(jù)也是讀取內(nèi)存中數(shù)據(jù),所以返回?cái)?shù)據(jù)
較大時(shí)壹将,需要使用該注解
/**
* 12.Streaming注解:表示響應(yīng)體的數(shù)據(jù)用流的方式返回嗤攻,適用于返回的數(shù)據(jù)比較大,該注解在
在下載大文件的特別有用
*/
@Streaming
@GET
Call<ProjectBean> downloadFile(@Url String fileUrl);