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

100

Je suis novice en maillot RESTful. Je voudrais demander quelle est la différence entre @PathParamet @QueryParamen maillot?

Mellon
la source

Réponses:

142

Les paramètres de requête sont ajoutés à l'URL après la ?marque, tandis qu'un paramètre de chemin fait partie de l'URL normale.

Dans l'URL ci tom- dessous pourrait être la valeur d'un paramètre de chemin et il y a un paramètre de requête avec le nom idet la valeur 1:

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

Ruben
la source
15

Parallèlement à la clarification ci-dessus fournie par @Ruben, je tiens à ajouter que vous pouvez également faire référence à l'équivalent de la même chose dans l'implémentation Spring RESTFull.

Spécification JAX-RS @PathParam - Lie la valeur d'un paramètre de modèle d'URI ou d'un segment de chemin 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 bean 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 bean de classe de ressource.

URI: utilisateurs / requête? From = 100

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

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

Pour obtenir la même chose avec Spring, vous pouvez utiliser

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

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

JRishi
la source
1

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

hien.nguyen
la source
0
    @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) {
        ...
        }
        }
natwar kumar
la source