我正在用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)我可以为此编写自己的拦截器模式吗-我愿意。
提前谢谢。
答案 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