2017-01-02 51 views
0

我正在尝试替换GET GET url中的字符串。查询如下:替换Android中的Retrofit GET请求中的字符串

@GET("read/something/Books?$filter=(substringof('{filter}',Description)+or+substringof('{filter}',Code)+or+substringof('{filter}',Title)+or+substringof('{filter}',Barcode))") 
    Call<ApiResponse<Book>> getFilteredBooks(@Path("filter") String filter); 

所以我想用动态字符串替换{filter}。 我得到一个错误:

java.lang.IllegalArgumentException: URL query string "$filter=(substringof('{filter}',Description)+or+substringof('{filter}',Code)+or+substringof('{filter}',Title)+or+substringof('{filter}',Barcode))" must not have replace block. For dynamic query parameters use @Query. 

我无法找到任何其他合适的注解,将正常工作。

+1

对于初学者来说,错误消息告诉你问题是什么。你需要使用@Query而不是@Path。 'filter'是查询参数,而不是路径参数 – akash93

回答

1

你应该使用查询参数,如:

@GET("read/something/Books") 
    Call<ApiResponse<Book>> getFilteredBooks(@Query("$filter") String filter); 

这将创建一个URL像.../read/something/Books?$filter={parameter you sent}

+0

感谢您的回答。我知道我可以使用@Query。但它看起来非常繁琐。我需要调用'getFilteredBooks('(substringof('SCRUM',Description)+或者+ substringof('SCRUM',Code)+或者+ substringof('SCRUM',Title)+或者+ substringof('SCRUM',Barcode) )“)' 当我在很多地方多次调用它时,它并不灵活,也许我想在未来添加一些其他过滤字段。真的没有办法简单地用url中的另一个字符串替换一个字符串? – kolczak

+0

好吧,我想出你要做什么,但是这些长串请求让我困惑。所以你可以建立你的查询参数,你可以创建一个方法'buildQueryParam(String filter){return“(substringof('+ filter +',Description)} + ...'在所有地方设置过滤器。返回查询参数的适当字符串:'getFilteredBooks(buildQueryParam(“SCRUM”))'' – Gudin