Jaka jest różnica między @PathParam a @QueryParam

100

Jestem nowicjuszem w koszulce RESTful. Chciałbym zapytać, co jest różnica między @PathParami @QueryParamna koszulce?

Mellon
źródło

Odpowiedzi:

142

Parametry zapytania są dodawane do ?adresu URL po znaku, podczas gdy parametr ścieżki jest częścią zwykłego adresu URL.

W poniższym adresie URL tommoże znajdować się wartość parametru ścieżki i jest jeden parametr zapytania z nazwą idi wartością 1:

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

Ruben
źródło
15

Wraz z powyższym wyjaśnieniem udzielonym przez @Ruben, chcę dodać, że można również odnieść się do odpowiednika tego samego w implementacji Spring RESTFull.

Specyfikacja JAX-RS @PathParam - wiąże wartość parametru szablonu URI lub segment ścieżki zawierający parametr szablonu z parametrem metody zasobu, polem klasy zasobów lub właściwością komponentu bean klasy zasobów.

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

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

@QueryParam - wiąże wartości parametru zapytania HTTP z parametrem metody zasobu, polem klasy zasobów lub właściwością komponentu bean klasy zasobów.

URI: users / query? From = 100

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

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

Aby osiągnąć to samo za pomocą Spring, możesz użyć

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

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

JRishi
źródło
1

Ponadto parametr zapytania może mieć wartość null, ale parametr ścieżki nie może. Jeśli nie dodasz parametru ścieżki, otrzymasz błąd 404. Możesz więc użyć parametru ścieżki, jeśli chcesz wysłać dane jako obowiązkowe.

hien.nguyen
źródło
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
źródło