基于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();
这是我得到的结果:
我正在记录的当前请求正文是我从拦截器中的FromBody添加的常用参数,除了我从@Field annoation传入的参数之外,并且服务器端信息告诉它的事情。
答案 0 :(得分:0)
我已经解决了这个问题,感谢@ iagreen的评论。
请求体被FormBody.Builder()替换.add()。build()传入我的拦截器中的chain.request()。newBuilder()。post()。build()强>
然后问题是如何在RequestBody中追加参数,解决方案可以引用Retrofit2: Modifying request body in OkHttp Interceptor