2016-06-08 3 views
10

Ich bin neu zu Retrofit 2 library.Ich las mehrere Artikel, um als Anfänger zu beginnen, und ich habe es geschafft, XML-Daten von meiner RESTful API ohne Angabe von Parametern zu holen.In meiner Methode, die das XML generiert Ressource ist unten.Nachrüstung 2 @path Vs @Query

@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 laufen

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

Es nicht bestanden, waren keine Daten von einem Client empfangen. Es dauerte eine Woche, bis ich versuchte, es zu beheben, indem ich einen Nicht-Parameter-Aufruf verwendete, der die Ressourcen abruft; So versuchte es zu

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

und es funktionierte gut zu ändern. Also meine Frage ist: Wann muss ich @Query und @Path Annotation in Retrofit 2 verwenden?

Antwort

36

Betrachten Sie dies ist der url:

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

Nun ist diese der Anruf:

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

So haben wir:

www.app.net/api/searchtypes/ {Pfad}/Filter? Typ = {Abfrage} & SearchText = {Abfrage}

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

1

Query ist die Verwendung für die URL-Parameter und mit @Query ("Passwort") die URL sein sollte:

user/john?password=**** 

Weg ist die Verwendung zu deren Austausch in Ihrem Pfad definiert, wie

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

Hier username ist path variabel und admin ist Abfragevariable

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

@Paul lass mich das auch ausprobieren –

0

@Path wird verwendet, wenn Sie eine URL mit '/' dynamischem Wert nach einem Schrägstrich haben. Beispiel "http://google.com/index.html/userid. Also in dieser URL/Benutzer-ID ist dynamisch, so auf diese URL Ihre Anfrage sollte @ Get ("index.html/{userid}") Calldata (@Path ("userid") int id);

@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? Benutzer-ID ist dynamisch, so auf diese URL zugreifen Ihre Anfrage sollte @ Get (" index.html ") Calldata (@Query (" userid ") int id);