Je suis novice en maillot RESTful. Je voudrais demander quelle est la différence entre @PathParam
et @QueryParam
en jersey?
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
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)
@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) {
...
}
}
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.