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
- Эта аннотация подразумевает, что переданный параметр будет заменен на путь конечной точки