Sự khác biệt giữa @PathParam và @QueryParam là gì


100

Tôi là một thành viên mới mặc áo RESTful. Tôi muốn hỏi sự khác nhau giữa áo sơ mi @PathParam@QueryParamáo thi đấu là gì?

Câu trả lời:


142

Tham số truy vấn được thêm vào url sau ?dấu, trong khi tham số đường dẫn là một phần của URL thông thường.

Trong URL bên dưới tomcó thể là giá trị của một tham số đường dẫn và có một tham số truy vấn với tên idvà giá trị 1:

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


15

Cùng với phần làm rõ ở trên do @Ruben cung cấp, tôi muốn nói thêm rằng bạn cũng có thể tham khảo tương tự như vậy trong triển khai Spring RESTFull.

Đặc tả JAX- RS @PathParam - Liên kết giá trị của tham số mẫu URI hoặc phân đoạn đường dẫn chứa tham số mẫu với tham số phương thức tài nguyên, trường lớp tài nguyên hoặc thuộc tính bean của lớp tài nguyên.

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

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

@QueryParam - Liên kết (các) giá trị của tham số truy vấn HTTP với tham số phương thức tài nguyên, trường lớp tài nguyên hoặc thuộc tính bean của lớp tài nguyên.

URI: người dùng / truy vấn? From = 100

@Path("/users")
public class UserService {

    @GET
    @Path("/query")
    public Response getUsers(
        @QueryParam("from") int from){
}}

Để đạt được điều tương tự khi sử dụng Spring, bạn có thể sử dụng

@PathVariable (Spring) == @PathParam (Jersey, JAX-RS),

@RequestParam (Spring) == @QueryParam (Jersey, JAX-RS)


1

Ngoài ra, tham số truy vấn có thể là rỗng nhưng tham số đường dẫn thì không. Nếu bạn không nối tham số đường dẫn, bạn sẽ gặp lỗi 404. Vì vậy, bạn có thể sử dụng tham số đường dẫn nếu bạn muốn gửi dữ liệu là bắt buộc.


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) {
        ...
        }
        }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.