我有一个Android应用程序,该应用程序与使用RQL的API(Jersey和OAuth v1)进行通信。这是通过使用Retrofit 2库完成的。
为了限制我获取的数据,将limit(limit,offset)参数添加到URL。这并不容易,因为Retrofit不允许我向URL添加空参数。例如,这是我的基本URL:api.acme.com/v1
,这是用户端点:api.acme.com/v1/users
。但是,当我想限制返回的用户数量时,我想使用api.acme.com/users?limit(10,2)
。
因为没有选择添加没有值的变量名称参数的选项,所以唯一不返回错误的方法是生成url,如下所示:
@GET Call<UserList> getUsers (@Url String path);
并传递以下网址:
http://api.acme.com/users?limit(10,2)
返回的错误是
{"error":1,"error_name":"OAUTH_SIGNATURE_EXCEPTION","error_message":"The OAuth signature is invalid"}
这是因为在生成OAuth签名时不会将空参数添加到URL。邮递员可以选择将这些空参数添加到签名中,但是我似乎在Retrofit中找不到此选项。有任何想法吗 ?也总是欢迎其他将空参数添加到我的URL的选项!
我已经尝试过使用地图,路径和查询,但是没有结果。
最佳答案
如果我正确地理解了您的问题,(假设/ v1 /始终存在,而不考虑限制参数,并假设您在问题中错位1个位置),则可以执行此操作。但是,这不是标准方法。这是一种解决方法,看起来有点难看。
改造baseUrl:“ http://api.acme.com/v1/”
@GET("{user}")
Call<UserList> getUsers(@Path("user") String user);
如果执行
getUsers("users")
,则解析为“ http://api.acme.com/v1/users”如果执行
getUsers("users?limit(10,2)")
,则解析为“ http://api.acme/com/v1/users?limit(10,2)”。 (您可以在此处添加网址编码。)如果您可以要求更改API,则建议将限制更改为标准查询参数格式。
例如)限制= X&偏移量= Y
以这种格式,您可以简单地使用@Query。