111 votes

Quelle est la différence entre @PathParam et @QueryParam ?

Je suis novice en matière de maillot RESTful. Je voudrais demander quelle est la différence entre @PathParam y @QueryParam dans le jersey ?

152voto

Ruben Points 4459

Les paramètres d'interrogation sont ajoutés à l'url après la balise ? tandis qu'un paramètre de chemin fait partie de l'URL ordinaire.

Dans l'URL ci-dessous tom pourrait être la valeur d'un paramètre de chemin d'accès et il existe un paramètre de requête portant le nom de id et la valeur 1 :

http://mydomain.com/tom?id=1

18voto

JRishi Points 148

En plus de la clarification ci-dessus fournie par @Ruben, je veux ajouter que vous pouvez également vous référer à l'équivalent de la même chose dans l'implémentation RESTFull de Spring.

Spécification JAX- RS @PathParam - Lie la valeur d'un paramètre de modèle URI ou d'un segment de chemin d'accès contenant le paramètre de modèle à un paramètre de méthode de ressource, à un champ de classe de ressource ou à une propriété de haricot de classe de ressource.

@Path("/users/{username}")
public class UserResource {

        @GET
        @Produces("text/xml")
        public String getUser(@PathParam("username") String userName) {
            ...
        }
    }

@QueryParam - Lie la ou les valeurs d'un paramètre de requête HTTP à un paramètre de méthode de ressource, un champ de classe de ressource ou une propriété de haricot de classe de ressource.

URI : users/query?from=100

@Path("/users")
public class UserService {

    @GET
    @Path("/query")
    public Response getUsers(
        @QueryParam("from") int from){
}}

Pour réaliser la même chose en utilisant Spring, vous pouvez utiliser

@PathVariable(Spring) == @PathParam(Jersey, JAX-RS),

@RequestParam(Spring) == @QueryParam(Jersey, JAX-RS)

3voto

hien.nguyen Points 1

De plus, le paramètre de requête peut être nul mais pas le paramètre de chemin. Si vous n'ajoutez pas le paramètre path, vous obtiendrez une erreur 404. Vous pouvez donc utiliser le paramètre path si vous voulez envoyer les données comme obligatoires.

0voto

natwar kumar Points 51
    @javax.ws.rs.QueryParam
    This annotation allows you to extract values from URI query parameters.
    @javax.ws.rs.PathParam
    This annotation allows you to extract values from URI template parameters.

        PART-1 : @javax.ws.rs.PathParam

        @Path("/mercedes")
        public class MercedesService {
        @GET
        @Path("/e55/{year}")
        @Produces("image/jpeg")
        public Jpeg getE55Picture(@PathParam("year") String year) {
        ...
        }

    If I query the JAX-RS service with GET /mercedes/e55/2006, the getE55Picture()
    method would match the incoming request and would be invoked.

    PART-2 : @javax.ws.rs.QueryParam

 URI might look like this: GET /cus?start=0&size=10

        @Path("/cus")
        public class GreedCorruption {
        @GET
        @Produces("application/xml")
        public String getDeathReport(@QueryParam("start") int start,
        @QueryParam("size") int size) {
        ...
        }
        }

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