Я новичок в майке RESTful. Я хотел бы спросить, в чем разница между трикотажем @PathParam
и @QueryParam
трикотажем?
Параметры запроса добавляются к URL-адресу после ?
метки, а параметр пути является частью обычного URL-адреса.
В приведенном ниже URL-адресе tom
может быть значение параметра пути, и есть один параметр запроса с именем id
и значением 1
:
http://mydomain.com/tom?id=1
Наряду с приведенным выше пояснением, предоставленным @Ruben, я хочу добавить, что вы также можете ссылаться на аналогичный эквивалент в реализации Spring RESTFull.
Спецификация JAX-RS @PathParam - связывает значение параметра шаблона URI или сегмент пути, содержащий параметр шаблона, с параметром метода ресурса, полем класса ресурса или свойством компонента класса ресурса.
@Path("/users/{username}")
public class UserResource {
@GET
@Produces("text/xml")
public String getUser(@PathParam("username") String userName) {
...
}
}
@QueryParam - привязывает значение (значения) параметра HTTP-запроса к параметру метода ресурса, полю класса ресурса или свойству компонента класса ресурса.
URI: пользователи / запрос? From = 100
@Path("/users")
public class UserService {
@GET
@Path("/query")
public Response getUsers(
@QueryParam("from") int from){
}}
Чтобы добиться того же с помощью Spring, вы можете использовать
@PathVariable (Spring) == @PathParam (Джерси, JAX-RS),
@RequestParam (Весна) == @QueryParam (Джерси, JAX-RS)
Кроме того, параметр запроса может иметь значение null, а параметр пути - нет. Если вы не добавите параметр пути, вы получите ошибку 404. Таким образом, вы можете использовать параметр пути, если хотите отправлять данные как обязательные.
@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) {
...
}
}