¿Cuál es la diferencia entre @PathParam y @QueryParam?

100

Soy novato en jersey RESTful. Me gustaría preguntar ¿cuál es la diferencia entre @PathParamy @QueryParamen jersey?

Mellon
fuente

Respuestas:

142

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 tompodría estar el valor de un parámetro de ruta y hay un parámetro de consulta con el nombre idy el valor 1:

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

Ruben
fuente
15

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)

JRishi
fuente
1

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.

hien.nguyen
fuente
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
fuente