Soy novato en jersey RESTful. Me gustaría preguntar ¿cuál es la diferencia entre @PathParam
y @QueryParam
en jersey?
Los parámetros de consulta se agregan a la URL después de la ?
marca, mientras que un parámetro de ruta es parte de la URL normal.
En la URL siguiente tom
podría estar el valor de un parámetro de ruta y hay un parámetro de consulta con el nombre id
y el valor 1
:
http://mydomain.com/tom?id=1
Junto con la aclaración anterior proporcionada por @Ruben, quiero agregar que también puede hacer referencia a un equivalente del mismo en la implementación Spring RESTFull.
Especificación JAX- RS @PathParam: vincula el valor de un parámetro de plantilla de URI o un segmento de ruta que contiene el parámetro de plantilla a un parámetro de método de recurso, campo de clase de recurso o propiedad de bean de clase de recurso.
@Path("/users/{username}")
public class UserResource {
@GET
@Produces("text/xml")
public String getUser(@PathParam("username") String userName) {
...
}
}
@QueryParam: vincula los valores de un parámetro de consulta HTTP a un parámetro de método de recurso, un campo de clase de recurso o una propiedad de bean de clase de recurso.
URI: usuarios / consulta? De = 100
@Path("/users")
public class UserService {
@GET
@Path("/query")
public Response getUsers(
@QueryParam("from") int from){
}}
Para lograr lo mismo usando Spring, puede usar
@PathVariable (Primavera) == @PathParam (Jersey, JAX-RS),
@RequestParam (primavera) == @QueryParam (Jersey, JAX-RS)
Además, el parámetro de consulta puede ser nulo, pero el parámetro de ruta no. Si no agrega el parámetro de ruta, obtendrá el error 404. Entonces puede usar el parámetro de ruta si desea enviar los datos como obligatorios.
@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) {
...
}
}