2 @path Vs @query nachrüsten


74

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 @Queryund @PathAnnotation in Retrofit 2 verwenden?

Antworten:


196

Bedenken Sie, dass dies die URL ist:

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

Das ist der Ruf:

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

Also haben wir:

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

Dinge, die nach dem kommen ? sind in der Regel Abfragen.


Dies sollte die richtige Antwort sein, danke für die Inspiration
Tommy Chong

Hat mir auch sehr geholfen! Es gibt einen Unterschied zwischen Abfrage und Pfad
Hardy

Was ist dann & gemeint in dieser URL? und in url type = {query} aber in @query ("type") sting responsetype, also wie wird = sign in diese url eingefügt? Ich war verwirrt über dieses Problem
Adnan Haider

23

Zum Beispiel:

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

Hier usernameist die pathVariable und typeist die Abfragevariable

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

@ Paul lass mich es auch ausprobieren. Vielen Dank
Mwesigye John Bosco

1
Ist es nicht erforderlich sein Typ anstelle von Server - Betreiber als @Query Parameter? Als:void getUserOuth(@Path("username") String username, @Query("type") String type)
benommen und verwirrt

4

@Query

  • Diese Anmerkung stellt jedes Abfrageschlüsselwertpaar dar, das zusammen mit der Netzwerkanforderung gesendet werden soll

@Path

  • Diese Anmerkung impliziert, dass der übergebene Parameter im Endpunktpfad ausgetauscht wird

3

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

2

Die Abfrage wird für URL-Parameter verwendet und mit @Query ("Passwort") sollte die URL wie folgt lauten:

user/john?password=****

Pfad wird verwendet, um in Ihrem Pfad definierte Elemente zu ersetzen, z

user/{username}

1

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.