Яка різниця між @PathParam та @QueryParam


100

Я новачок у ДЖЕРЕЛІ РЕСТАВ. Мені хотілося б запитати, чим відрізняється між собою @PathParamі @QueryParamв майці?

Відповіді:


142

Параметри запиту додаються до URL після ?позначки, тоді як параметр шляху є частиною звичайної URL-адреси.

У наведеній нижче URL-адресі tomможе бути значення параметра шляху, і є один параметр запиту з назвою idта значенням 1:

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


15

Поряд з вищезазначеним уточненням, наданим @Ruben, я хочу додати, що ви можете також посилатися на еквівалент того ж у весняній реалізації RESTFull.

Специфікація JAX-RS @PathParam - Прив'язує значення параметра шаблону URI або сегмента шляху, що містить параметр шаблона, до параметра методу ресурсу, поля класу ресурсу або властивості бона класу ресурсів.

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

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

@QueryParam - Прив'язує значення (-ів) параметра запиту HTTP до параметра ресурсного методу, поля класу ресурсів або властивості bean класу ресурсів.

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

Крім того, параметр запиту може бути нульовим, але параметр шляху не може. Якщо не додати параметр шляху, ви отримаєте помилку 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.