美文网首页
retrofit注解

retrofit注解

作者: 面向星辰大海的程序员 | 来源:发表于2021-04-04 17:27 被阅读0次

@GET 表示get请求

@GET("url")//""一般是整个Url的后半部分
fun 方法(): Call<bean类或ResponseBody>

@POST 表示post请求

@POST("url")//""一般是整个Url的后半部分
fun 方法(): Call<bean类或ResponseBody>

@HTTP 比较通用

@HTTP(method = "get", path = "project/tree/json", hasBody = false)
fun 方法(): Call<bean类或ResponseBody>

@Straming 表示响应体的数据以流的方式返回,适用于返回的数据比较大,常用于下载大文件

@Streaming
@GET
fun downloadFile(@Url fileUrl: String): Call<ResponseBody>

@Headers 添加请求头且不会覆盖

@Headers("Cache-Cantrol: max-age=10000")
@GET("")
fun example1(): Call<ResponseBody>

@Header 添加请求头并且会覆盖已有的相同的请求头,必须提供参数,如果参数为null,这个头会被省略,否则会使用参数值的toString方法的返回值

@GET("")
fun example2(@Header("xx") xx: String): Call<ResponseBody>

@Body 表示以json方式请求 多用于post非表单请求

@POST("url")//""一般是整个Url的后半部分
fun 方法(@Body wanAndroidProjectBean: WanAndroidProjectBean): Call<bean类或ResponseBody>

@FormUrlEncoded配合@Field以表单的形式发送Http请求

@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以表单的形式发送Http请求

@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表示一个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 表示请求体是一个支持文件上传的Form表单,需要结合@Part使用

@Part 用于表单字段与@Multipart结合使用,支持三种类型:{@link RequestBody}、{@link okhttp3.MultipartBody.Part}、任意类型

@PartMap 用于表单字段与@Multipart结合使用,默认接受的类型是Map<String,RequestBody>,可用于多文件上传

//上传单个文件
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()


//上传多个图片
@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:表示请求实体是一个支持文件上传的Form表单,需要配合使用@Part,适用于有文件 上传的场景
* Part:用于表单字段,Part和PartMap与Multipart注解结合使用,适合文件上传的情况
* PartMap:用于表单字段,默认接受的类型是Map<String,REquestBody>,可用于实现多文件上传
* Part 后面支持三种类型,{@link RequestBody}、{@linkokhttp3.MultipartBody.Part} 、任意类型;
*
* @param file 服务器指定的上传图片的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);
////////请求///////////
//上传单个图片1
File file = new File("");
RequestBody requestBody =RequestBody.create(MediaType.parse("image/png"),file);
wanAndroidApi.upload1(requestBody).execute();
//上传单个图片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
未使用该注解,默认会把数据全部载入内存,之后通过流获取数据也是读取内存中数据,所以返回数据
较大时,需要使用该注解
/**
* 12.Streaming注解:表示响应体的数据用流的方式返回,适用于返回的数据比较大,该注解在
在下载大文件的特别有用
*/
@Streaming
@GET
Call<ProjectBean> downloadFile(@Url String fileUrl);

相关文章

  • Retrofit通过OkHttp发送请求的过程

    retrofit是对okhttp的封装。retrofit使用注解来创建请求的,retrofit的注解有哪些,分别代...

  • Retrofit 注解学习

    Retrofit 注解学习

  • Android - Retrofit注解

    本文将Retrofit注解完全解析一下,好记性不如烂笔头。 注解分类: Retrofit注解分为三类。分别是Htt...

  • Retrofit2的使用

    不怕跌倒,所以飞翔 参考文献:Retrofit2.0使用详解Retrofit 2.0 注解篇 1.Retrofit...

  • Retrofit

    学习 Retrofit 的方式 https://square.github.io/retrofit/ 看注解源码中...

  • Retrofit 2.1 笔(详细)

    Android 网路请求框架 一、RetrofitService 详细方法 1.retrofit注解 方法注解:@...

  • Android-Retrofit

    概述 Retrofit 通过注解将 Java Interface API 调用转化为 HTTP Call ,注解提...

  • Retrofit注解

    详细文章: blog.csdn.net/fanatic_/article/details/53066938

  • Retrofit注解

    1、什么是Retrofit? Retrofit 是一个Square开发的安卓客户端请求库。其中内部封装了okhtt...

  • retrofit注解

    @GET 表示get请求 @POST 表示post请求 @HTTP 比较通用 @Straming 表示响应体的数据...

网友评论

      本文标题:retrofit注解

      本文链接:https://www.haomeiwen.com/subject/dvackltx.html