RetroFit请求参数和返回格式说明
2017-02-10 18:53
295 查看
1 Get请求
通过@Query注解请求参数,如下:
@POST("banner/api/5item.json")
Observable<TestResponse> login(@Query("bId") String bId, @Query("name") String name);
发出的请求形式如下:
http://7xk9dj.com1.z0.glb.clouddn.com/banner/api/5item.json? bId =test1& name =test3
参数都被添加到请求Url的后面
通过@ QueryMap注解请求参数,如下:
@POST("banner/api/5item.json ")
Observable<TestResponse> login(@QueryMap Map<String, String> params);
发出的请求形式与上例一致。
2 简单Post请求
@POST("banner/api/5item.json")
Observable<TestResponse> login(@Query("p") String p, @Body TestRequest request);
其中TestRequest为请求body,如下:
public class TestRequest extends BaseRequest {
@SerializedName("request")
public Request request;
public TestRequest(){
request = new Request();
}
public static class Request{
public String wContact;
public String wSuggestion;
}
}
发出的请求形式如下:
1. P参数依然会放在url后面
2. 整个TestRequest会以json的格式放在http请求的body中传输
3 FormUrlEncoded
通过@Field注解添加表单,如下:
@FormUrlEncoded
@POST("banner/api/5item.json")
Observable<TestResponse> login(@Field("param1 ") String param1, @Field(" param2") String param2);
通过@FieldMap注解添加表单,如下:
@FormUrlEncoded
@POST("banner/api/5item.json ")
Observable<TestResponse> login(@FieldMap Map<String, String> params);
发出的请求形式如下:
注:这种形式和简单Post中body的数据格式是不一样的。
4 Multipart
该方式是支持上传文件的
通过@Part注解请求参数,如下:
@Multipart
@POST("banner/api/5item.json")
Observable<TestResponse> login(@Part RequestBody body);
通过@PartMap注解请求参数,如下:
@Multipart
@POST("banner/api/5item.json")
Observable<TestResponse> login(@PartMap Map<String, RequestBody> params);
上传文件使用方法如下:
示例为一个bid请求参数和2张图片
File file1 = new File(SDCardUtils.getSDCardPath() + "DCIM/100MEDIA/IMAG0009.jpg");
File file2 = new File(SDCardUtils.getSDCardPath() + "DCIM/100MEDIA/IMAG0010.jpg");
Map<String, RequestBody> map = new HashMap<>();
RequestBody bId = RequestBody.create(MediaType.parse("text/plain"), "1");
RequestBody imgFile1 = RequestBody.create(MediaType.parse("image/*"), file1);
RequestBody imgFile2 = RequestBody.create(MediaType.parse("image/*"), file2);
map.put("bId", bId);
map.put("headImage1\"; filename=\"" + file1.getName(), imgFile1);
map.put("headImage1\"; filename=\"" + file2.getName(), imgFile2);
注意:上传文件时map中key的格式必须是"headImage1\"; filename=\"" + file1.getName()。
1. headImage1:为参数key的名字
2. "; filename=\"" + file1.getName():为的文件的名字。
上传多张图片时,key的名字可以是相同的
参考<四种常见的 POST 提交数据方式>:
http://www.cnblogs.com/aaronjs/p/4165049.html
通过@Query注解请求参数,如下:
@POST("banner/api/5item.json")
Observable<TestResponse> login(@Query("bId") String bId, @Query("name") String name);
发出的请求形式如下:
http://7xk9dj.com1.z0.glb.clouddn.com/banner/api/5item.json? bId =test1& name =test3
参数都被添加到请求Url的后面
通过@ QueryMap注解请求参数,如下:
@POST("banner/api/5item.json ")
Observable<TestResponse> login(@QueryMap Map<String, String> params);
发出的请求形式与上例一致。
2 简单Post请求
@POST("banner/api/5item.json")
Observable<TestResponse> login(@Query("p") String p, @Body TestRequest request);
其中TestRequest为请求body,如下:
public class TestRequest extends BaseRequest {
@SerializedName("request")
public Request request;
public TestRequest(){
request = new Request();
}
public static class Request{
public String wContact;
public String wSuggestion;
}
}
发出的请求形式如下:
1. P参数依然会放在url后面
2. 整个TestRequest会以json的格式放在http请求的body中传输
3 FormUrlEncoded
通过@Field注解添加表单,如下:
@FormUrlEncoded
@POST("banner/api/5item.json")
Observable<TestResponse> login(@Field("param1 ") String param1, @Field(" param2") String param2);
通过@FieldMap注解添加表单,如下:
@FormUrlEncoded
@POST("banner/api/5item.json ")
Observable<TestResponse> login(@FieldMap Map<String, String> params);
发出的请求形式如下:
注:这种形式和简单Post中body的数据格式是不一样的。
4 Multipart
该方式是支持上传文件的
通过@Part注解请求参数,如下:
@Multipart
@POST("banner/api/5item.json")
Observable<TestResponse> login(@Part RequestBody body);
通过@PartMap注解请求参数,如下:
@Multipart
@POST("banner/api/5item.json")
Observable<TestResponse> login(@PartMap Map<String, RequestBody> params);
上传文件使用方法如下:
示例为一个bid请求参数和2张图片
File file1 = new File(SDCardUtils.getSDCardPath() + "DCIM/100MEDIA/IMAG0009.jpg");
File file2 = new File(SDCardUtils.getSDCardPath() + "DCIM/100MEDIA/IMAG0010.jpg");
Map<String, RequestBody> map = new HashMap<>();
RequestBody bId = RequestBody.create(MediaType.parse("text/plain"), "1");
RequestBody imgFile1 = RequestBody.create(MediaType.parse("image/*"), file1);
RequestBody imgFile2 = RequestBody.create(MediaType.parse("image/*"), file2);
map.put("bId", bId);
map.put("headImage1\"; filename=\"" + file1.getName(), imgFile1);
map.put("headImage1\"; filename=\"" + file2.getName(), imgFile2);
注意:上传文件时map中key的格式必须是"headImage1\"; filename=\"" + file1.getName()。
1. headImage1:为参数key的名字
2. "; filename=\"" + file1.getName():为的文件的名字。
上传多张图片时,key的名字可以是相同的
参考<四种常见的 POST 提交数据方式>:
http://www.cnblogs.com/aaronjs/p/4165049.html
相关文章推荐
- springmvc 通过异常增强返回给客户端统一格式 springmvc请求参数异常处理
- Retrofit请求参数注解字段说明
- RxJava + Retrofit+okhttp 封装,包含对相同格式请求数据、相同格式返回数据处理,显示 Material Design 加载 dialog,文件上传下载进度展示、全局异常捕捉。
- spring mvc接收参数方式,json格式返回请求数据
- 根据指定的编码格式返回请求的参数集合
- RxJava Retrofit2 网络请求,返回数据格式统一的数据报文处理方法
- Retrofit请求参数注解字段说明
- RxJava Retrofit2 网络请求,返回数据格式统一的数据报文处理方法
- Retrofit请求参数注解字段说明
- datatable前端传递参数与返回值格式说明
- APACHE日志格式定义,APACHE日志参数说明
- IOS请求php返回的数据JSON数据无法正确解析 utf-8格式
- 中国天气网接口 返回json格式分析说明
- tomcat控制台错误_http请求参数格式错误
- HTTP请求返回的状态码说明
- js解析url参数返回json格式
- 以post方式携窗体等参数向服务器发送请求 发出去的字节流 返回的内容
- Linq中用Contain时,传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为2100
- 父类和子类的同名成员函数参数格式相同,返回值类型不同
- Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据