Jestem nowicjuszem w koszulce RESTful. Chciałbym zapytać, co jest różnica między @PathParam
i @QueryParam
na koszulce?
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 tom
może znajdować się wartość parametru ścieżki i jest jeden parametr zapytania z nazwą id
i wartością 1
:
http://mydomain.com/tom?id=1
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)
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.
@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) {
...
}
}