[rest] @PathParam과 @QueryParam의 차이점은 무엇입니까?

저는 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 : users / query? from = 100

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

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

Spring을 사용하여 동일한 결과를 얻으려면 다음을 사용할 수 있습니다.

@PathVariable (Spring) == @PathParam (저지, JAX-RS),

@RequestParam (Spring) == @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) {
        ...
        }
        }


답변