如何配置Square的Retrofit Client以处理具有可变数量参数的请求


问题内容

我正在构建一个Android应用程序,并且正在使用Square的Retrofit库进行短暂的网络调用。我是Java和Android的新手。到目前为止,我已经像这样构造了请求:

@GET("/library.php")
void library(
        @Query("one_thing") String oneThing,
        @Query("another_thing") String anotherThing,
        Callback<Map<String,Object>> callback
);

并这样称呼他们:

    service.library(oneThing, anotherThing, callback);

我需要实现一个接受可变数量(不超过10个左右)参数的请求。必须单独定义它们并传递null或为给定请求中不存在的传递一些东西,这很麻烦。有没有一种方法可以为请求定义接口,使其接受变量号或参数,并@Query为参数字典/映射中的每个元素自动构造s?像这样:

@GET("/library.php")
void library(
        Map<String,Object> parameters,
        Callback<Map<String,Object>> callback
);

service.library(parameters, callback);

在此先感谢您提供任何提示。

编辑:在这种情况下,为与请求不相关的参数传递null无效。理想情况下,我将能够@Query基于参数字典来设置/创建,这样,@Query如果键的值为空,则键将不会成为a 。

编辑:我正在专门寻找与GET请求一起使用的解决方案。


问题答案:

您可以始终尝试将参数作为HTTP正文传递,例如在此示例中(注意:我是作者)

但是,正如您建议的那样,请使用带有值的Map代替,这样可能对您有用:

@POST("/library.php")
public void library(@Body Map<String, Object> parameters, Callback<Map<String,Object>> callback);