webentwicklung-frage-antwort-db.com.de

retrofit 2 @path Vs @query

Ich bin neu, um die Bibliothek 2 nachzurüsten. Ich las mehrere Artikel, um als Anfänger zu beginnen, und es gelang mir, XML-Daten von meiner RESTful-API abzurufen, ohne Parameter anzugeben. 

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

Jetzt 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 ein Nicht-Parameter-Aufruf die Ressourcen abrief; Also versuchte ich, es in zu ändern 

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

und es hat gut funktioniert. Meine Frage ist also: Wann muss ich @Query und @Path Annotation in Retrofit 2 verwenden?

35

Betrachten Sie dies als URL:

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

Nun ist dies der Aufruf:

@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/ {Pfad} / Filter? Typ = {Abfrage} & SearchText = {Abfrage}

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

85

Zum Beispiel: 

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

Hier ist username die Variable path und type die Abfragevariable 

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

Abfrage wird für URL-Parameter verwendet. Bei @Query ("Kennwort") sollte die URL folgendermaßen lauten:

user/john?password=****

Pfad wird verwendet, um das in Ihrem Pfad definierte Element zu ersetzen, z 

user/{username}
1
Johann67

@Path wird verwendet, wenn Sie über eine URL verfügen, die nach einem Backword-Slash einen dynamischen Wert "/" hat. Beispiel " http://google.com/index.html/userid . Daher ist diese URL/Benutzer-ID dynamisch Um auf diese URL zuzugreifen, muss Ihre Anfrage @ Get ("index.html/{userid}") Calldata (@Path ("userid") int id) sein.

@Query wird verwendet, wenn Sie eine URL haben, die '?' dynamischer Wert nach einem Fragezeichen. Beispiel " http://google.com/index.html?userid.So in dieser URL? Die Benutzer-ID ist dynamisch. Um auf diese URL zuzugreifen, sollte Ihre Anforderung @ sein. Get ("index.html") Calldata (@Query ("userid") int id);

0
Malti Devnani

Mit @Path-Annotation können Sie Parameter auf Ihre eigene Art bestellen. Und definierte die Reihenfolge in URL.

@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);
0
Majedur Rahaman

@Query

  • Diese Anmerkung stellt ein beliebiges Abfrage-Schlüsselwertpaar dar, das zusammen mit der Netzwerkanforderung gesendet werden soll

@Path

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