在我的andorid应用中,我正在使用Retrofit2发出GET请求:
http://myapi.com/items/list
但我也想提出另一个要求,例如
http://myapi.com/items/list/filter/active:true,min_price:100
因此filter参数是可选的。我正在尝试执行以下操作:
@GET("items/items/list{filter}")
Observable<ResponseItems> getItems(@Path("filter") String filter);
并像这样调用它:
service.getItems("")
和:
service.getItems("/filter/active:true,min_price:100")
但这是行不通的。因此,我最终创建了两个单独的服务调用,一个带有过滤器参数,另一个没有。我认为应该有更优雅的方法。
因此,我已经看到了您想要实现的目标。
您的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
注释中的属性是因为您的可选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")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句