retrofit post请求
2016-03-21 17:48
423 查看
一般网上给的demo post型请求都很简单,没有特殊的要去,不需要添加headers,没有任何约束,只要参照如下几种写法即可:
第一种:Field
第二种:FieldMap(考虑到请求体过多,所以采用map)
以上两种请求都是以键值对形式去请求,但是一般项目中post请求除了键值对,也还会遇到json、xml的请求,后台也做了约束,约束其上传格式为json/xml,无默认(防止不认识上传的东东),所以一般要添加头文件(测试必须得用fiddle,可减少一大半时间,悔~)
下面谈谈如何添加头文件,第一种方式直接在api中请求方式之上添加,如下:
但是这种方式不方便管理(假如所有请求都得加同一个请求头,那肯定十分麻烦)
最好是写一个拦截器,在其中添加header,如下:
最后配置网络处加入
好了大功告成!
最后的最后,一定要注意用json上传,@Body中千万不能写String类型,否则会导致请求体构造错误(json格式不正确,多出\),正确写法如下:
关于post其他用法(如上传文件,以后再行记录)。
第一种:Field
@FormUrlEncoded @POST("/newfind/index_ask") Observable<Response> getDaJia(@Field("page") int page, @Field("pageSize") int size, @Field("tokenMark") long tokenMark, @Field("token") String token );
第二种:FieldMap(考虑到请求体过多,所以采用map)
@FormUrlEncoded @POST("FundPaperTrade/AppUserLogin") Observable<Response> getTransData(@FieldMap Map<String,String> map);
以上两种请求都是以键值对形式去请求,但是一般项目中post请求除了键值对,也还会遇到json、xml的请求,后台也做了约束,约束其上传格式为json/xml,无默认(防止不认识上传的东东),所以一般要添加头文件(测试必须得用fiddle,可减少一大半时间,悔~)
下面谈谈如何添加头文件,第一种方式直接在api中请求方式之上添加,如下:
@Headers({"Content-type:application/json", "Content-Length:59"})*/ @POST("FundPaperTrade/AppUserLogin") Observable<Response> getTransData(@Body TestBean str);
但是这种方式不方便管理(假如所有请求都得加同一个请求头,那肯定十分麻烦)
最好是写一个拦截器,在其中添加header,如下:
public class HttpInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request.Builder builder = chain.request().newBuilder(); Request requst = builder.addHeader("Content-type", "application/json").build(); return chain.proceed(requst); } }
最后配置网络处加入
client.interceptors().add(new HttpInterceptor());
好了大功告成!
最后的最后,一定要注意用json上传,@Body中千万不能写String类型,否则会导致请求体构造错误(json格式不正确,多出\),正确写法如下:
@POST("FundPaperTrade/AppUserLogin") Observable<Response> getTransData(@Body TestBean str);
关于post其他用法(如上传文件,以后再行记录)。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories