Ich bin neu in der Nachrüstung von 2-Bibliotheken. Ich habe mehrere Artikel gelesen, um als Anfänger zu beginnen, und es ist mir gelungen, XML-Daten von meiner RESTful-API abzurufen, ohne Parameter anzugeben. Meine Methode, die die XML-Ressource generiert hat, ist unten aufgeführt.
@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;
}
Nun, als ich versuchte, Parameter in der Schnittstelle zu übergeben
@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);
Es konnte nicht ausgeführt werden, es wurden keine Daten von einem Client empfangen. Es dauerte eine Woche, bis ich versuchte, das Problem zu beheben, indem ich die Ressourcen mithilfe eines Nicht-Parameter-Aufrufs abrief. Also versuchte ich es zu ändern in:
@GET("user/{username}/{password}")
Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);
und es hat gut funktioniert. Meine Frage lautet also: Wann muss ich @Query
und @Path
Annotation in Retrofit 2 verwenden?
Zum Beispiel:
@GET("/user/{username}?type={admin}")
Hier
username
ist diepath
Variable undtype
ist die Abfragevariable@GET("/user/{username}?type={admin}") void getUserOuth(@Path("username") String username, @Query("type") String type)
quelle
void getUserOuth(@Path("username") String username, @Query("type") String type)
@Query
@Path
quelle
@ Path Annotation verwenden, um Parameter auf Ihre eigene Weise zu bestellen. Und die Reihenfolge in URL definiert.
@GET("user/{username}/{password}") Call<List<UserCredentail>> getUserOuth(@Path("username") String username, @Path("password") String password);
@Query Annotation automatische Reihenfolge der Parameter und hinzugefügt mit URL einschließlich "?" Symbol.
@GET("user") Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);
quelle
Die Abfrage wird für URL-Parameter verwendet und mit @Query ("Passwort") sollte die URL wie folgt lauten:
Pfad wird verwendet, um in Ihrem Pfad definierte Elemente zu ersetzen, z
quelle
@Path wird verwendet, wenn Sie eine URL haben, die nach einem Backword-Schrägstrich den dynamischen Wert '/' hat. Beispiel " http://google.com/index.html/userid . In dieser URL ist / userid also dynamisch, um auf diese URL zuzugreifen Anfrage sollte @Get ("index.html / {userid}") sein Calldata (@Path ("userid") int id);
@Query wird verwendet, wenn Sie eine URL mit '?' dynamischer Wert nach einem Fragezeichen. Beispiel " http://google.com/index.html?userid.So in dieser URL? Benutzer-ID ist dynamisch. Um auf diese URL zuzugreifen, sollte Ihre Anfrage @Get (" index.html ") Calldata sein (@Query ("userid") int id);
quelle