@PathParam และ @QueryParam แตกต่างกันอย่างไร


100

ฉันเป็นมือใหม่ในเสื้อ RESTful ผมอยากจะขอให้สิ่งที่แตกต่างระหว่าง@PathParamและ@QueryParamในเสื้อ?

คำตอบ:


142

พารามิเตอร์การสืบค้นจะถูกเพิ่มใน url หลัง?เครื่องหมายในขณะที่พารามิเตอร์ path เป็นส่วนหนึ่งของ URL ปกติ

ใน URL ด้านล่างtomอาจเป็นค่าของพารามิเตอร์เส้นทางและมีพารามิเตอร์การค้นหาหนึ่งรายการที่มีชื่อidและค่า1:

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


15

นอกเหนือจากคำชี้แจงข้างต้นที่จัดทำโดย @Ruben แล้วฉันต้องการเพิ่มว่าคุณยังสามารถอ้างอิงสิ่งเดียวกันในการใช้งาน Spring RESTFull ได้อีกด้วย

JAX- RS Specification @PathParam - ผูกค่าของพารามิเตอร์เทมเพลต URI หรือเซ็กเมนต์พา ธ ที่มีพารามิเตอร์เทมเพลตกับพารามิเตอร์วิธีรีซอร์สฟิลด์คลาสรีซอร์สหรือคุณสมบัติ bean คลาสทรัพยากร

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

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

@QueryParam - ผูกค่าของพารามิเตอร์เคียวรี HTTP กับพารามิเตอร์วิธีรีซอร์สฟิลด์คลาสรีซอร์สหรือคุณสมบัติ bean คลาสรีซอร์ส

URI: ผู้ใช้ / แบบสอบถาม? จาก = 100

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

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

เพื่อให้ได้สิ่งเดียวกันโดยใช้ Spring คุณสามารถใช้

@PathVariable (ฤดูใบไม้ผลิ) == @PathParam (เจอร์ซีย์, JAX-RS),

@RequestParam (ฤดูใบไม้ผลิ) == @QueryParam (Jersey, JAX-RS)


1

นอกจากนี้พารามิเตอร์การสืบค้นสามารถเป็นค่าว่าง แต่พารามิเตอร์เส้นทางไม่สามารถ หากคุณไม่ต่อท้ายพารามิเตอร์ path คุณจะได้รับข้อผิดพลาด 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) {
        ...
        }
        }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.