Retrofit 2 @path Vs @query

Я новичок в модификации библиотеки 2. Я прочитал несколько статей, чтобы начать работу как новичок, и мне удалось получить данные XML из моего RESTful API без указания параметров. В моем методе, который сгенерировал ресурс 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);  

Не удалось запустить, клиент не получил никаких данных. Мне потребовалась неделя, чтобы попытаться это исправить, хотя с помощью вызова без параметров извлекал ресурсы; Поэтому попытался изменить это на:

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

и это работало нормально. Итак, мой вопрос: когда мне нужно использовать @Query и @Path Annotation в модификации 2?

Ответ 1

Считайте, что это 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}

Вещи, которые приходят после ? обычно запросы.

Ответ 2

Например:

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

Здесь username является переменной path, а type является переменной запроса

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

Ответ 3

Запрос используется для параметров URL и с @Query ( "пароль" ) URL должен быть:

user/john?password=****

Путь используется для замены элемента, определенного в вашем пути, например

user/{username}

Ответ 4

@Path используется, когда у вас есть URL-адрес, который имеет динамическое значение "/" после косой черты назад. Пример " http://google.com/index.html/userid. в этом url/userid является динамическим, поэтому для доступа к этому URL-адресу ваш запрос должен быть @Get ( "index.html/{идентификатор}" ) Calldata (@Path ( "userid" ) int id);

@Query используется, когда у вас есть URL-адрес, который имеет?? динамическое значение после вопросительного знака. Пример " http://google.com/index.html?userid.So в этом URL-адресе? userid является динамическим, поэтому для доступа к этому URL-адресу ваш запрос должен быть @Get ( "index.html" ) Calldata (@Query ( "userid" ) int id);

Ответ 5

@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);

Ответ 6

@Query

  • Эта аннотация представляет любую пару значений ключа запроса для отправки вместе с запросом сети

@Path

  • Эта аннотация подразумевает, что переданный параметр будет заменен на путь конечной точки