retrofit post请求

一般网上给的demo post型请求都很简单,没有特殊的要去,不需要添加headers,没有任何约束,只要参照如下几种写法即可:
第一种: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其他用法(如上传文件,以后再行记录)。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值