retrofit +okhttp post遇到的点坑

Post中的header和Parameters
//获取注册验证码
@FormUrlEncoded
@POST("verify/")
Observable<String> post(@Header(value = "timestamp") String timestamp, @Header(value = "sign") String sign,@Header (value = "phone") String phone,@Field("phone") String v);

其中 @Header 为post请求中的header , @Field("phone")为请求中的parameter ,仔细看文档才发现phone要求是parameter而不是header。

@Path

@FormUrlEncoded
@POST("verify/{sign}&{timestamp}")
Observable<String> post(@Path(value = "timestamp")String tt,@Path(value = "sign")String sgins)

@path里的参数必须在@POST里有,它是用来替代这里的参数的这里我想要的格式是verify/sign&timestamp

它会将其拼接在url后面www.xxxxx/verify/sigh&timestamp

如果想要带?的链接,比如www.xxxxx/verify/?timestamp=xxx&sigh=xxx

需要使用@Query来实现

如下

@FormUrlEncoded
@POST("verify/")
Observable<String> post(@Query(value = "timestamp") String tt, @Query(value = "sign")String sgins);

这里不需{timestamp}{sign}

Query里不需要 替换,它会自动拼接出来

打印的请求log如下http:xxxxxx/verify/?timestamp=1533541967&sign=xxxxxxxxxx

之所以要讲这里,是因为前任程序员在这个?这里请求的时候被编码成了%3F,这个是没法使用的,而他的写法是

使用@Path,在{sign}里进行替换,这样会被再编码橙%3F,遇到这种是需要用@Query的,也希望各位大佬们不要在不求甚解的情况下就使用这个不好维护的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值