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