java - implementar - retrofit 2 @path Vs @query
retrofit post (4)
Soy nuevo en la actualización de 2 bibliotecas. Leí varios artículos para comenzar como principiante y logré obtener datos XML de mi API RESTful sin especificar parámetros. En mi método que generó el recurso XML se encuentra a continuación.
@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;
}
Ahora cuando intenté pasar el parámetro en la interfaz
@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);
No se pudo ejecutar, ningún cliente recibió datos. Me tomó una semana intentar arreglarlo usando una llamada sin parámetros para recuperar los recursos; Así que traté de cambiarlo a
@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);
y funcionó bien. Entonces, mi pregunta es: ¿cuándo necesito usar @Query
y @Path
Annotation en la modificación 2?
@Path se usa cuando tiene una URL que tiene un valor dinámico ''/'' después de una barra invertida. Ejemplo: http://google.com/index.html/userid . Por lo tanto, en esta URL / ID de usuario es dinámico, por lo tanto, para acceder a esta URL. la solicitud debe ser @Get ("index.html / {userid}") Calldata (@Path ("userid") int id);
@Query se usa cuando tienes una URL que tiene ''?'' valor dinámico después de un signo de interrogación. Ejemplo " http://google.com/index.html?userid.So en este url? el ID de usuario es dinámico, por lo que para acceder a este url su solicitud debe ser @Get (" index.html ") Calldata (@Query ("userid") int id);
Considera que esta es la url:
www.app.net/api/searchtypes/862189/filters?Type=6&SearchText=School
Ahora esta es la llamada:
@GET("/api/searchtypes/{Id}/filters")
Call<FilterResponse> getFilterList(@Path("Id") long customerId,
@Query("Type") String responseType,
@Query("SearchText") String searchText);
Entonces tenemos:
www.app.net/api/searchtypes/ {Path} / filters? Type = {Query} & SearchText = {Query}
Cosas que vienen después del ? suelen ser consultas.
La consulta se usa para los parámetros de la URL y con @Query ("contraseña") la URL debe ser:
user/john?password=****
La ruta se usa para reemplazar el elemento definido en su ruta, como
user/{username}
Por ejemplo:
@GET("/user/{username}?type={admin}")
Aquí el username
es la variable de path
, y el type
es la variable de consulta
@GET("/user/{username}?type={admin}")
void getUserOuth(@Path("username") String username, @Query("type") String type)