web-dev-qa-db-ja.com

レトロフィット2 @パスvs @クエリ

Retrofit 2ライブラリを初めて使用します。初心者向けの記事をいくつか読んで、パラメーターを指定せずにRESTful APIからXMLデータを取得しました。XMLリソースを生成したメソッドは次のとおりです。

@GET
@Path("/foods")
@Produces(MediaType.APPLICATION_XML)
public List<FoodPyramid> getFoodPyramid() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    trans = session.beginTransaction();
    List<FoodPyramid> foodList = session.createQuery("from FoodPyramid").list();
    try {
        trans.commit();
        session.close();
    } catch (Exception e) {
        session.close();
        System.err.println("Food Pyramid fetch " + e);
    }
    System.err.println("Am in the food modal. . . . . . . .");
    return foodList;
}

今、インターフェイスでパラメータを渡そうとしたとき

@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);  

実行に失敗し、クライアントがデータを受信しませんでした。非パラメーター呼び出しを使用してリソースを取得することで、修正に1週間かかりました。だからそれを変更しようとした:

@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);  

そしてそれはうまくいきました。だから私の質問は次のとおりです。レトロフィット2で@Queryおよび@Path注釈を使用する必要があるのはいつですか。

48

これがURLだと考えてください:

www.app.net/api/searchtypes/862189/filters?Type=6&SearchText=School

今、これは呼び出しです:

@GET("/api/searchtypes/{Id}/filters")
Call<FilterResponse> getFilterList(
          @Path("Id") long customerId,
          @Query("Type") String responseType,
          @Query("SearchText") String searchText
);

だから私たちは持っています:

www.app.net/api/searchtypes/{Path}/filters?Type={Query}&SearchText={Query}

の後に来るものは通常クエリです。

114

例えば:

@GET("/user/{username}?type={admin}")

ここで、usernamepath変数であり、typeはクエリ変数です

@GET("/user/{username}?type={admin}")
void getUserOuth(@Path("username") String username, @Query("type") String type)
18

クエリはURLパラメータに使用され、@ Query( "password")ではURLは次のようになります。

user/john?password=****

パスは、次のようにパスで定義されたアイテムを置き換えるために使用されます

user/{username}
2
Johann67

@Pathは、バックワードスラッシュの後に「/」動的値を持つURLがある場合に使用されます。例 " http://google.com/index.html/userid 。したがって、このURLでは/ useridは動的なので、このURLにアクセスするには、リクエストは@Get( "index.html/{userid}")Calldata(@Path( "userid")int id);でなければなりません。

「?」を持つURLがある場合は@Queryが使用されます疑問符の後の動的な値。例 " http://google.com/index.html?userid.So このURLで?useridは動的であるため、このURLにアクセスするには、リクエストは@Get( "index.html")Calldata(@Query( "userid")int id);

1
Malti Devnani

@Pathアノテーションは、独自の方法としてパラメーターの順序付けに使用します。そして、URLで順序を定義しました。

@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);

@Queryアノテーションのパラメーターの自動順序付けと、「?」を含むURLの追加シンボル。

   @GET("user")
    Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);
1
Majedur Rahaman

@Query

  • この注釈は、ネットワーク要求とともに送信されるクエリキーと値のペアを表します

@Path

  • このアノテーションは、渡されたパラメーターがエンドポイントパスでスワップされることを意味します
0
Mina