我有一个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。

09-10 07:01
查看更多