Java 改型错误URL查询字符串不能有替换块

Java 改型错误URL查询字符串不能有替换块,java,android,get,retrofit,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 = int

我有这个功能

      @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);
@GET("/users?filters[0][operator]=equals")
UserDto retrieveUsersByFilters(@Path("filters[0][field]") String nameFilter, @Path("filters[0][value]") String value);
但我有一个错误:

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

我已经在firefox上测试了url,它运行良好

谢谢你的回复

编辑

解决方案:

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

不要将值直接放在路径中,而应该放在方法签名中。 不完全确定,但请尝试以下方法:

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

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

@GET("/users?filters[0][operator]=equals")
UserDto retrieveUsersByFilters(
    @Query("filters[0][field]") String nameFilter,
    @Query("filters[0][value]") String value);
您可以在
URL=“/api-mobile\u prateek2.php?method=getProductById&pid=”上阅读有关
@Query
的更多信息 @GET(“/api-mobile\u prateek2.php?method=getProductById”) 调用响应产品(@Query(“pid”)字符串pid);
不要将pid放在@GET中,改型会使用@Query自动修复url

从:

示例1:

@GET("/friends")
 Call<ResponseBody> friends(@Query("page") int page);
@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String group);
@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String... groups);
@GET("/friends")
 Call<ResponseBody> friends(@Query(value="group", encoded=true) String group);
@GET(“/friends”)
呼叫好友(@Query(“page”)int page);
与foo.friends(1)通话会产生/friends?page=1。 带有null的示例:


示例2:

@GET("/friends")
 Call<ResponseBody> friends(@Query("page") int page);
@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String group);
@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String... groups);
@GET("/friends")
 Call<ResponseBody> friends(@Query(value="group", encoded=true) String group);
@GET(“/friends”)
呼叫好友(@Query(“group”)字符串组);
使用foo.friends(null)调用会产生/friends。 数组/Varargs示例:


示例3:

@GET("/friends")
 Call<ResponseBody> friends(@Query("page") int page);
@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String group);
@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String... groups);
@GET("/friends")
 Call<ResponseBody> friends(@Query(value="group", encoded=true) String group);
@GET(“/friends”)
呼叫好友(@Query(“group”)字符串…groups);
与foo.friends(“同事”、“保龄球”)通话会产生/friends?group=同事&group=保龄球。 默认情况下,参数名称和值是URL编码的。指定encoded=true以更改此行为


示例4:

@GET("/friends")
 Call<ResponseBody> friends(@Query("page") int page);
@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String group);
@GET("/friends")
 Call<ResponseBody> friends(@Query("group") String... groups);
@GET("/friends")
 Call<ResponseBody> friends(@Query(value="group", encoded=true) String group);
@GET(“/friends”)
呼叫好友(@Query(value=“group”,encoded=true)字符串组);

使用foo.friends(“foo+bar”)调用会产生/friends?group=foo+bar。

在您的方法中,当您使用@Path参数时,它会将此参数添加到您的URL中。例如,URL/login?usr=john将是@GET(“/login”)void myMethod(@Path(“usr”)字符串usr)的结果调用该方法时,将“usr”arg设置为“john”,我尝试了您的解决方案,但出现以下错误:Reformation.ReformationError:InterfaceUser.retrieveUsersByFilters:@Path参数名称必须匹配\{([a-zA-Z][a-zA-Z0-9\-]*)\。找到:筛选[0][field](参数#1)这些死链接..:(链接不再适用于Javadoc:-/。还有其他链接吗?这个问题中的url非常复杂-建议您阅读该文档。服务提供商需要在HTTP GET末尾使用json定义,如下所示,以避免XML默认值。这是如何使用Reformation2实现的?