web-dev-qa-db-fra.com

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

Je suis novice en maillot RESTful. Je voudrais demander quelle est la différence entre @PathParam et @QueryParam en jersey?

92
Mellon

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

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

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

134
Ruben

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

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 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 le même résultat en utilisant Spring, vous pouvez utiliser

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

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

12
JRishi
    @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) {
        ...
        }
        }
0
natwar kumar

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 souhaitez envoyer les données comme obligatoires.

0
hien.nguyen