post parameter that passed in as @Field does not being added into RequestBody in Retrofit2?

90 views Asked by At

base on Retrofit @Field doc, when making a post request

a combination of using @FormUrlEncoded and @Field will yields a request body of: paramName=paramValue&paramName=paramValue.

but what I am not getting field paramemters included in RequestBody.

my interface definition as below:

(I have no endpoint, and jake Wharton says use ./ as explicit intent that you want to use the path of the base URL and add nothing to it, but I tried @POST("./") it's not work, i got 404 not found error, so I add full url address to bypass this error temporarily)

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);

}

and this is how I make calls to interface service:

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()));
}

}

below is retrofit instance in it's private constructor

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();

this is the result I got:

enter image description here

the current request body that I am logging is the common parameters that I added from FromBody in interceptor, only except the parameters that I passed in from @Field annoation, and server side info tells the same thing.

1

There are 1 answers

0
Qin On

I have solved this issue, thanks to @iagreen's comment.

the request body was replaced by FormBody.Builder().add().build() which passed into chain.request().newBuilder().post().build() in my interceptor.

then the question turns out to be how to append paramemters in RequestBody, and the solution can refers to Retrofit2: Modifying request body in OkHttp Interceptor