Qual é a diferença entre @PathParam e @QueryParam


100

Eu sou um novato na camisa RESTful. Gostaria de perguntar qual é a diferença entre @PathParame @QueryParamem jersey?

Respostas:


142

Os parâmetros de consulta são adicionados ao url após a ?marca, enquanto um parâmetro de caminho faz parte do URL normal.

No URL abaixo, tompode estar o valor de um parâmetro de caminho e há um parâmetro de consulta com o nome ide o valor 1:

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


15

Junto com o esclarecimento acima fornecido por @Ruben, gostaria de acrescentar que você também pode se referir ao equivalente do mesmo na implementação de Spring RESTFull.

Especificação JAX-RS @PathParam - Vincula o valor de um parâmetro de modelo URI ou um segmento de caminho contendo o parâmetro de modelo a um parâmetro de método de recurso, campo de classe de recurso ou propriedade de bean de classe de recurso.

@Path("/users/{username}")
public class UserResource {

        @GET
        @Produces("text/xml")
        public String getUser(@PathParam("username") String userName) {
            ...
        }
    }

@QueryParam - Vincula o (s) valor (es) de um parâmetro de consulta HTTP a um parâmetro de método de recurso, campo de classe de recurso ou propriedade de bean de classe de recurso.

URI: usuários / consulta? De = 100

@Path("/users")
public class UserService {

    @GET
    @Path("/query")
    public Response getUsers(
        @QueryParam("from") int from){
}}

Para conseguir o mesmo usando Spring, você pode usar

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

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


1

Além disso, o parâmetro de consulta pode ser nulo, mas o parâmetro de caminho não. Se você não anexar o parâmetro de caminho, obterá o erro 404. Portanto, você pode usar o parâmetro de caminho se quiser enviar os dados como obrigatórios.


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) {
        ...
        }
        }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.