В чем разница между @PathParam и @QueryParam


100

Я новичок в майке RESTful. Я хотел бы спросить, в чем разница между трикотажем @PathParamи @QueryParamтрикотажем?

Ответы:


142

Параметры запроса добавляются к URL-адресу после ?метки, а параметр пути является частью обычного URL-адреса.

В приведенном ниже URL-адресе tomможет быть значение параметра пути, и есть один параметр запроса с именем idи значением 1:

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


15

Наряду с приведенным выше пояснением, предоставленным @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)


1

Кроме того, параметр запроса может иметь значение null, а параметр пути - нет. Если вы не добавите параметр пути, вы получите ошибку 404. Таким образом, вы можете использовать параметр пути, если хотите отправлять данные как обязательные.


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) {
        ...
        }
        }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.