传递给@Field的post参数没有被添加到Retrofit2的RequestBody中?

时间:2016-12-20 03:46:42

标签: retrofit2

基于Retrofit @Field doc,在发布帖子请求时

使用@FormUrlEncoded和@Field的组合将产生一个请求体:paramName = paramValue& paramName = paramValue。

但是我没有在RequestBody中包含字段参数。

我的界面定义如下:

(我没有端点,jake Wharton说使用./作为显式意图,你想使用基本URL的路径并且不添加任何东西,但是我试过@POST(“./”)它不起作用,我得到404未找到错误,所以我添加完整的URL地址暂时绕过此错误)

public interface BannerService {
@FormUrlEncoded
@POST("http://10.10.20.190:6020/router")
Flowable<List<BannerBeanList.BannerBean>> getBannerData(@Field("method") String method, @Field("adspaceId") String adspaceId);

}

这就是我调用接口服务的方式:

public class RemoteListDataSource implements RemoteDataSource {
@Override
public Flowable<List<BannerBeanList.BannerBean>> getBannerListData(ADFilterType adFilterType) {
    BannerService bannerService = RetrofitHttpManger.getInstance().create(BannerService.class);
    return bannerService.getBannerData("mz.app.ad.list", String.valueOf(adFilterType.getValue()));
}

}

下面的

是它的私有构造函数

中的改进实例
retrofit = new Retrofit.Builder()
            .client(httpClientBuilder.build())
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            //TODO baseurl tempororily hard code for test purpose
            .baseUrl("http://10.10.20.190:6020/router/")
            .build();

这是我得到的结果:

enter image description here

我正在记录的当前请求正文是我从拦截器中的FromBody添加的常用参数,除了我从@Field annoation传入的参数之外,并且服务器端信息告诉它的事情。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,感谢@ iagreen的评论。

请求体被FormBody.Builder()替换.add()。build()传入我的拦截器中的chain.request()。newBuilder()。post()。build()

然后问题是如何在RequestBody中追加参数,解决方案可以引用Retrofit2: Modifying request body in OkHttp Interceptor