81 votes

retrofit 2 @path Vs @query

Je suis nouveau à rénover 2 de la bibliothèque.J'ai lu plusieurs articles pour commencer en tant que débutant, et j'ai réussi à récupérer les données XML à partir de mon API RESTful sans spécification de paramètres.Dans ma méthode, qui a généré la ressource XML est ci-dessous.

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

Maintenant, quand j'ai essayé de passer des paramètres dans l'interface

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

Il n'a pas pu exécuter,aucune donnée n'a été recevoir par un client . Il m'a fallu une semaine pour tenter d'y remédier en utilisant un paramètre non appel extraites les ressources; Donc essayé de le changer de

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

et il a bien fonctionné. Donc Ma question est: Quand dois-je utiliser @Query et @Path d'Annotation dans la rénovation 2 ?

219voto

Considérez ceci est l'url:

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

Maintenant, c'est l'appel:

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

Nous avons donc:

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

Les choses qui viennent après le ? sont généralement des requêtes.

25voto

Nikson Kanti Paul Points 1768

Par exemple:

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

Ici username est la variable path , et type est la variable de requête

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

3voto

Johann67 Points 252

La requête est utilisée pour les paramètres d'URL et avec @Query ("mot de passe") l'URL doit être:

 user/john?password=****
 

Le chemin est utilisé pour remplacer l'élément défini dans votre chemin, comme

 user/{username}
 

3voto

Malti Devnani Points 92

@Chemin est utilisé lorsque vous avez des url, ce qui est '/' valeur dynamique après un backword slash.Exemple "http://google.com/index.html/userid. Donc, dans cette url /nom d'utilisateur est dynamique afin d'accéder à cette url de votre demande doit être @Get("index.html/{idutilisateur}") Calldata(@Path("userid")int id);

@Requête est utilisé lorsque vous avez une url qui a"? " dynamique de la valeur après un point d'interrogation.Exemple "http://google.com/index.html?userid.So dans cette url ? userid est dynamique afin d'accéder à cette url de votre demande doit être @Get("index.html") Calldata(@Query("userid")int id);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X