改造错误URL查询字符串必须没有替换块

时间:2014-07-07 12:07:08

标签: java android get retrofit

我有这个功能

      @GET("/users?filters[0][field]={param}&filters[0][operator]=equals&filters[0][value]={value}")
UserDto retrieveUsersByFilters(@Path("param") String nameFilter, @Path("value") String value);

我试着这样称呼它:

   UserDto currentUser = interfaceUser.retrieveUsersByFilters(User.LOGIN, login);

但我有错误:

retrofit.RetrofitError:InterfaceUser.retrieveUsersByFilters:URL查询字符串“filters [0] [field] = {param}& filters [0] [operator] = equals& filters [0] [value] = {value}”一定不能有替换块。

我已经在firefox上测试了网址并且工作正常。

感谢您的回复

修改

解决方案:

          @GET("/users?filters[0][operator]=equals")
          UserDto retrieveUsersByFilters(
          @Query("filters[0][field]") String nameFilter,
          @Query("filters[0][value]") String value);

4 个答案:

答案 0 :(得分:23)

查询参数有自己的注释,自动附加到URL。

@GET("/users?filters[0][operator]=equals")
UserDto retrieveUsersByFilters(
    @Query("filters[0][field]") String nameFilter,
    @Query("filters[0][value]") String value);

您可以在its Javadoc

上详细了解@Query

答案 1 :(得分:5)

 URL="/api-mobile_prateek2.php?method=getProductById&pid="


 @GET("/api-mobile_prateek2.php?method=getProductById")
    Call<Product> responseproduct(@Query("pid") String pid);

不要将 pid 放在@GET中,使用@Query

自动修复网址

答案 2 :(得分:0)

不要将值直接放在路径中,而是更喜欢方法签名。 不完全确定,但尝试这样的事情:

@GET("/users?filters[0][operator]=equals")
UserDto retrieveUsersByFilters(@Path("filters[0][field]") String nameFilter, @Path("filters[0][value]") String value);

答案 3 :(得分:0)

  

来自JavaDoc

示例1:

added_by

使用foo.friends(1)进行呼叫会产生/ friends?page = 1。 带有null的示例:


示例2:

@GET("/friends")
 Call<ResponseBody> friends(@Query("page") int page);

使用foo.friends(null)进行调用会产生/ friends。 数组/变量示例:


示例3:

@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String group);

使用foo.friends(“ coworker”,“ bowling”)进行呼叫会产生/ friends?group = coworker&group = bowling。 默认情况下,参数名称和值是URL编码的。指定encode = true可以更改此行为。


示例4:

@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String... groups);

使用foo.friends(“ foo + bar”))进行呼叫会产生/ friends?group = foo + bar。