在我的android应用程序中,我正在使用改装2发出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")

但它不起作用。所以我最终创建了两个独立的服务调用,一个带有filter param,另一个没有。不过,我认为应该有更优雅的方法。

最佳答案:

所以我看到了你想要达到的目标。
您的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
呼叫。
由于可选的path参数包含
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")