web-dev-qa-db-ja.com

後付けエラーURLクエリ文字列に置換ブロックがあってはなりません

私はこの機能を持っています

      @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でURLをテストしており、正常に動作します。

ご回答ありがとうございます

編集する

解決:

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

クエリパラメータには、URLに自動的に追加される独自の注釈があります。

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

its Javadoc@Queryの詳細を読むことができます

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


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

@GETにpidを入れないでください、@ Queryを使用してRetrofitが自動的にURLを修正します

5
SATHISH RA

パスに直接値を入れないでください。ただし、メソッドシグネチャで優先してください。完全にはわかりませんが、次のようなことを試してください:

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

JavaDoc から:

例1:

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

Foo.friends(1)で呼び出すと、/ friends?page = 1が生成されます。 nullの例:


例2:

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

Foo.friends(null)で呼び出すと、/ friendsが生成されます。配列/変数の例:


例3:

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

Foo.friends( "coworker"、 "bowling")で呼び出すと、/ friends?group = coworker&group = bowlingが生成されます。パラメータの名前と値は、デフォルトでURLエンコードされています。この動作を変更するには、encoded = trueを指定します。


例4:

@GET("/friends")
 Call<ResponseBody> friends(@Query(value="group", encoded=true) String group);

Foo.friends( "foo + bar"))で呼び出すと、/ friends?group = foo + barが生成されます。

0
Barakuda