在我的andorid应用程序中,我正在使用Retrofit2进行GET请求:
http://myapi.com/items/list
但我还想提出另一个请求,例如
http://myapi.com/items/list/filter/active:true,min_price:100
因此过滤器参数是可选的。我正在尝试执行以下操作:
@GET("items/items/list{filter}")
Observable<ResponseItems> getItems(@Path("filter") String filter);
并将其称为:
service.getItems("")
和
service.getItems("/filter/active:true,min_price:100")
但它不起作用。所以我最终创建了两个单独的服务调用,一个使用过滤器参数,另一个没有。我认为应该有更优雅的方法。
答案 0 :(得分:1)
所以我已经看到了你想要实现的目标。
你的api声明应如何:
@GET("items/list/{filter}")
Observable<ResponseItems> getItems(@Path(value = "filter", encoded = true) String filter);
并且致电service.getItems("")
会导致http://myapi.com/items/list/
被称为
电话service.getItems("filter/active:true,min_price:100")
会导致
http://myapi.com/items/list/filter/active:true,min_price:100
被召唤。
encoded
注释中的@Path
属性已设置,因为您的可选路径参数包含/
,并且在没有该属性的情况下对其进行改造。
正如我在评论中写的那样,最好使用两个声明:
@GET("items/list/")
Observable<ResponseItems> getItems();
@GET("items/list/filter/{filter}")
Observable<ResponseItems> getItems(@Path(value = "filter") String filter);
因此您可以将其称为service.getItems("active:true,min_price:100")
答案 1 :(得分:0)
用简单的单词make方法重载。创建两个具有相同名称和不同参数的方法。检查我下面的源代码。 (用Kotlin编写)
@GET("myportal/news/{id}")
fun getNewsList(@Path("id") id: String): Call<NewsEntity>
@GET("myportal/news/{id}/{dateTime}")
fun getNewsList(@Path("id") id: Long, @Path("dateTime") dateTime: String): Call<NewsEntity>