Android Retrofit2可选@Path param

时间:2016-11-28 19:26:00

标签: android retrofit2

在我的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")

但它不起作用。所以我最终创建了两个单独的服务调用,一个使用过滤器参数,另一个没有。我认为应该有更优雅的方法。

2 个答案:

答案 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>