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

Java 如何配置Square';s改造客户端以处理具有可变参数数的请求,java,android,networking,retrofit,Java,Android,Networking,Retrofit,我正在构建一个Android应用程序,并且正在使用Square的改装库进行短期网络通话。我对Java和Android比较陌生。到目前为止,我已经构建了如下请求: @GET("/library.php") void library( @Query("one_thing") String oneThing, @Query("another_thing") String anotherThing, Callback<Map<String,Ob

我正在构建一个Android应用程序,并且正在使用Square的改装库进行短期网络通话。我对Java和Android比较陌生。到目前为止,我已经构建了如下请求:

@GET("/library.php")
void library(
        @Query("one_thing") String oneThing,
        @Query("another_thing") String anotherThing,
        Callback<Map<String,Object>> callback
);
我需要实现一个请求,该请求接受可变数量的参数,不超过10个左右。必须单独定义它们并传递
null
或某些给定请求中不存在的内容,这很麻烦。是否有一种方法可以为请求定义一个接口,以便它接受一个可变的数字或参数,并为参数字典/映射中的每个元素自动构造
@Query
s?大概是这样的:

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

service.library(parameters, callback);
@GET(“/library.php”)
空库(
映射参数,
回调
);
库(参数、回调);
提前谢谢你的提示

编辑:在这种情况下,为与请求无关的参数传递null无效。理想情况下,我能够基于参数字典设置/创建
@Query
s,这样键的值为null时就不会变成
@Query


编辑:我正在寻找一种处理GET请求的解决方案。

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

但正如您所建议的,使用带有您的值的地图,这样可能对您有用:

@POST("/library.php")
public void library(@Body Map<String, Object> parameters, Callback<Map<String,Object>> callback);
@POST(“/library.php”)
公共void库(@Body-Map-parameters,回调);

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

他们引入了注释@QueryMap

此注释允许您传递和实现Map类的对象,它不如Post请求好,Post请求允许您将对象作为参数传递,但它完成了工作

@GET("/library.php")
public void library(@QueryMap Map<String, Object> parameters, Callback<Map<String,Object>> callback);
@GET(“/library.php”)
公共void库(@QueryMap-parameters,回调);

谢谢!你的例子表明,这只适用于POST而不适用于GET,对吗?如果是,GET是否有类似的解决方案?(在一秒钟内进行测试…)是的,看起来这在GET中是不可能的。是的,不幸的是,这是HTTP的一个限制。RequestBody仅在Post/Put上发送,而不是Get
@GET("/library.php")
public void library(@QueryMap Map<String, Object> parameters, Callback<Map<String,Object>> callback);