Ich bin Neuling im RESTful-Trikot. Ich möchte fragen, was der Unterschied zwischen @PathParam
und @QueryParam
im Trikot ist.
Abfrageparameter werden der URL nach der ?
Markierung hinzugefügt , während ein Pfadparameter Teil der regulären URL ist.
In der folgenden URL tom
könnte sich der Wert eines Pfadparameters befinden, und es gibt einen Abfrageparameter mit dem Namen id
und dem Wert 1
:
http://mydomain.com/tom?id=1
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)
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.
@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) {
...
}
}