Qual è la differenza tra @PathParam e @QueryParam


100

Sono un principiante in maglia RESTful. Vorrei chiedere qual è la differenza tra @PathParame @QueryParamin jersey?

Risposte:


142

I parametri di query vengono aggiunti ?all'URL dopo il segno, mentre un parametro di percorso fa parte dell'URL normale.

Nell'URL di seguito tompotrebbe essere il valore di un parametro di percorso e c'è un parametro di query con il nome ide il valore 1:

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


15

Insieme al chiarimento sopra fornito da @Ruben, voglio aggiungere che puoi anche fare riferimento allo stesso equivalente nell'implementazione Spring RESTFull.

JAX- RS Specification @PathParam - Associa il valore di un parametro di modello URI o un segmento di percorso contenente il parametro di modello a un parametro del metodo di risorsa, a un campo di classe di risorsa oa una proprietà del bean di classe di risorsa.

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

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

@QueryParam - Associa i valori di un parametro di query HTTP a un parametro del metodo di risorsa, a un campo di classe di risorsa oa una proprietà del bean di classe di risorsa.

URI: utenti / query? Da = 100

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

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

Per ottenere lo stesso risultato usando Spring, puoi usare

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

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


1

Inoltre, il parametro della query può essere nullo ma il parametro del percorso no. Se non aggiungi il parametro path, otterrai un errore 404. Quindi puoi usare il parametro path se vuoi inviare i dati come obbligatori.


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) {
        ...
        }
        }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.