retrofit2-重复的网址参数名称问题

时间:2018-10-07 18:16:30

标签: retrofit2

我正在用java / retrofit2编写一个json / rest客户端。效果很好,遇到了障碍。我是(teamdesk.net)的客户,该服务使用重复的url参数来表示选择特定的列。 (没有任何列参数,它只会选择全部)..所以像这样:

?column=firstname&column=lastname&column=age ...

我知道我可以使用N个@Query()装饰器对此建模,例如:

Call<List<User>> groupList(@Query("column") String col1, @Query("column") String col2);

那么这里的问题是,我限于固定的N列数。我可以使用多种请求方法来处理此问题(1列,2列,3列等),但这很麻烦。

我不能使用@QueryMap()模式,因为明显的原因,它不允许使用多个“列”键。

我尝试了这种模式,它可以工作:

@GET("Patient/select.json{query}")
Call<List<Patient>> getPatients(@Path("query") String urlquery);

然后致电:

getPatients("?top=5&column=firstname&column=lastname&column=age")

但是我担心这是黑客行为,某些更高版本的改装会破坏这一点。

所以我正在寻找建议:

1)我的@GET(“ Patient / select.json {query}”)黑客是个好主意吗?

2)有什么更好的方法可以让我在调用之前获得对url参数的编辑权限?

3)是否有一些现有的拦截器模式可以提供帮助?

4)我可以为此编写自己的拦截器模式吗-我愿意。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

在改造documentation中,您可以简单地将varargs与@Query注释一起使用,如下所示:

@GET("Patient/select.json")
Call<List<Patient>> getPatients(@Query("column") String... columns);

您可以使用任意数量的字符串调用

getPatients("column1", ..., "columnN");

,并显示网址:

  

yourBaseUrl /患者/select.json?column=column1&...&column = columnN