如何配置Square的改造客户端以处理具有可变参数数量的请求



我正在构建一个Android应用程序,并使用Square的改装库进行短暂的网络呼叫。我对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或其他东西,这很麻烦。有没有办法为请求定义一个接口,使其接受一个或多个变量,并为参数字典/映射中的每个元素自动构造@Querys?类似这样的东西:

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

提前感谢您的任何提示。

编辑:在这种情况下,为与请求无关的参数传递null无效。理想情况下,我可以根据参数字典设置/创建@Query,这样,如果键的值为null,它们就不会变成@Query

编辑:我特别想找一个能处理GET请求的解决方案。

您可以尝试将参数作为HTTP Body传递,例如在本例中(注意:我是作者)

但正如你所建议的,使用带有你的值的Map,所以这可能对你有用:

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

有点晚了,但我还是会发布它,以防有人在谷歌上发现同样的问题。

他们推出了Annotation@QueryMap

这个注释允许您传递和实现Map类的对象,不如Post请求的那样好,后者允许您传递object作为参数,但它完成了工作。

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

最新更新