web-dev-qa-db-fra.com

mise à niveau 2 @path Vs @query

Je suis novice dans la modernisation de la bibliothèque 2. J'ai lu plusieurs articles pour commencer en tant que débutant et j'ai réussi à récupérer les données XML de mon API RESTful sans spécifier de paramètres. 

 @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 le paramètre dans l'interface

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

L'exécution a échoué, aucune donnée n'a été reçue par un client. Il m'a fallu une semaine pour essayer de résoudre ce problème en utilisant un appel non paramétrique pour récupérer les ressources. 

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

et cela a bien fonctionné. Ma question est donc la suivante: quand dois-je utiliser les annotations @Query et @Path dans la modification 2?

35

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

Donc nous avons:

www.app.net/api/searchtypes/ {Path} / filtres? Type = {Requête} & SearchText = {Requête}

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

85

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)
16

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

user/john?password=****

Path est utilisé pour remplacer un élément défini dans votre chemin, comme 

user/{username}
1
Johann67

@Path est utilisé lorsque l'URL a la valeur dynamique '/' après un backword slash.Example " http://google.com/index.html/userid . Donc, dans cette url/userid est dynamique pour accéder à cette URL votre demande doit être @ Get ("index.html/{userid}") Calldata (@Path ("userid") int id);

@Query est utilisé quand vous avez une URL qui a '?' valeur dynamique après un point d'interrogation.Exemple " http://google.com/index.html?userid.So dans cette URL? userid est dynamique. Pour accéder à cette URL, votre demande doit être @ Get ( "index.html") Calldata (@Query ("IDutilisateur") id id);

0
Malti Devnani

Les annotations @Path sont utilisées pour classer les paramètres à votre guise. Et défini l'ordre dans l'URL.

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

@Query annotation ordre automatique des paramètres et ajouté avec url, y compris "?" symbole.

   @GET("user")
    Call<List<UserCredentail>> getUserOuth(@Query("username") String username, @Query("password") String password);
0
Majedur Rahaman