Was ist der Unterschied zwischen @PathParam und @QueryParam?

100

Ich bin Neuling im RESTful-Trikot. Ich möchte fragen, was der Unterschied zwischen @PathParamund @QueryParamim Trikot ist.

Mellon
quelle

Antworten:

142

Abfrageparameter werden der URL nach der ?Markierung hinzugefügt , während ein Pfadparameter Teil der regulären URL ist.

In der folgenden URL tomkönnte sich der Wert eines Pfadparameters befinden, und es gibt einen Abfrageparameter mit dem Namen idund dem Wert 1:

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

Ruben
quelle
15

Zusammen mit der obigen Klarstellung von @Ruben möchte ich hinzufügen, dass Sie in der Spring RESTFull-Implementierung auch auf das Äquivalent derselben verweisen können.

JAX-RS-Spezifikation @PathParam - Bindet den Wert eines URI-Vorlagenparameters oder eines Pfadsegments, das den Vorlagenparameter enthält, an einen Ressourcenmethodenparameter, ein Ressourcenklassenfeld oder eine Ressourcenklassen-Bean-Eigenschaft.

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

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

@QueryParam - Bindet die Werte eines HTTP-Abfrageparameters an einen Ressourcenmethodenparameter, ein Ressourcenklassenfeld oder eine Ressourcenklassen-Bean-Eigenschaft.

URI: Benutzer / Abfrage? Von = 100

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

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

Um dasselbe mit Spring zu erreichen, können Sie verwenden

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

@RequestParam (Frühling) == @QueryParam (Jersey, JAX-RS)

JRishi
quelle
1

Außerdem kann der Abfrageparameter null sein, der Pfadparameter jedoch nicht. Wenn Sie den Pfadparameter nicht anhängen, wird der Fehler 404 angezeigt. Sie können also den Pfadparameter verwenden, wenn Sie die Daten als obligatorisch senden möchten.

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