dynamic地将可选参数添加到API请求

我有一个Android应用程序与REST API进行通信。

对于每个请求,我希望我的应用程序能够添加可选参数,除了必需的参数。

我怎样才能实施这与改造? 目前所有的参数在接口中都是硬编码的:

@GET("/user/{id}/comments?position={pos}") void getComments(@Path("id") int id, @Query("pos") int pos, Callback<String> cb); @GET("/user/{id}/likes?n={number}") void getLikes(@Path("id") int id, @Query("number") int number, Callback<String> cb); /* etc */ 

是否有可能“子类”的RestAdapter或东西能够dynamic地添加可选参数到我的请求?

Related of "dynamic地将可选参数添加到API请求"

你有几个方法来实现这一点:

  • 默认情况下,Retrofit会正确处理所有空查询参数的空值,因此您可以执行如下操作:

     @GET("/user/{id}/likes") void getLikes(@Path("id") int id, @Query("n") Integer number, @Query("pos") Integer pos Callback<String> cb); 

如果使用Object而不是int,则可以使用null调用可选参数的方法:

  getLikes(1, null, null, cb); // to get /user/1/likes getLikes(1, 2, null, cb); // to get /user/1/likes?n=2 
  • 通过使用RequestInterceptor:

     RestAdapter.Builder builder= new RestAdapter.Builder() .setRequestInterceptor(new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addHeader("Accept", "application/json;versions=1"); if(/*condition*/){ request.addQueryParam(arg0, arg1) } } }); 

支持Map<String,String>现在可用。 只需使用@QueryMap Map<String, String> params

来自http://square.github.io/retrofit/

对于复杂的查询参数组合,可以使用Map。

例:

 @GET("/group/{id}/users") List<User> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);