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?

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


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)


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.


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) {
        ...
        }
        }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.