46.5. 하위 리소스 작업


46.5.1. 개요

둘 이상의 리소스에서 서비스를 처리해야 하는 경우가 많습니다. 예를 들어 주문 처리 서비스에서 모범 사례에서는 각 고객이 고유한 리소스로 처리된다고 제안합니다. 각 주문은 고유한 리소스로도 처리됩니다.

JAX-RS API를 사용하여 고객 리소스 및 주문 리소스를 하위 리소스로 구현합니다. 하위 리소스는 root 리소스 클래스를 통해 액세스하는 리소스입니다. 리소스 클래스의 메서드에 @Path 주석을 추가하여 정의합니다. 하위 리소스는 다음 두 가지 방법 중 하나로 구현할 수 있습니다.

46.5.2. 하위 리소스 지정

하위 리소스는 @Path 주석으로 메서드를 장식하여 지정됩니다. 하위 리소스의 URI는 다음과 같이 구성됩니다.

  1. 하위 리소스의 @Path 주석 값을 하위 리소스의 상위 리소스의 @Path 주석 값에 추가합니다.

    상위 리소스의 @Path 주석은 하위 리소스가 포함된 클래스의 오브젝트를 반환하는 리소스 클래스의 메서드에 있을 수 있습니다.

  2. 루트 리소스에 도달할 때까지 이전 단계를 반복합니다.
  3. 어셈블된 URI는 서비스가 배포되는 기본 URI에 추가됩니다.

예를 들어 예 46.6. “주문 하위 리소스” 에 표시된 하위 리소스의 URI는 baseURI/customerservice/order/12 일 수 있습니다.

예 46.6. 주문 하위 리소스

...
@Path("/customerservice/")
public class CustomerService
{
  ...
  @Path("/orders/{orderId}/")
  @GET
  public Order getOrder(@PathParam("orderId") String orderId)
  {
    ...
  }
}
Copy to Clipboard Toggle word wrap

46.5.3. 하위 리소스 방법

하위 리소스 방법은 @Path 주석과 HTTP 동사 주석 중 하나로 장식됩니다. 하위 리소스 메서드는 지정된 HTTP 동사를 사용하여 리소스에 대한 요청을 직접 처리합니다.

예 46.7. “하위 리소스 방법” 세 가지 하위 리소스 메서드가 있는 리소스 클래스를 표시합니다.

  • getOrder() 는 URI가 /customerservice/orders/{orderId}/ 와 일치하는 리소스에 대한 HTTP GET 요청을 처리합니다.
  • updateOrder() 는 URI가 /customerservice/orders/{orderId}/ 와 일치하는 리소스에 대한 HTTP PUT 요청을 처리합니다.
  • newOrder()/customerservice/orders/ 에서 리소스에 대한 HTTP POST 요청을 처리합니다.

예 46.7. 하위 리소스 방법

...
@Path("/customerservice/")
public class CustomerService
{
  ...
  @Path("/orders/{orderId}/")
  @GET
  public Order getOrder(@PathParam("orderId") String orderId)
  {
    ...
  }

  @Path("/orders/{orderId}/")
  @PUT
  public Order updateOrder(@PathParam("orderId") String orderId,
                           Order order)
  {
    ...
  }

  @Path("/orders/")
  @POST
  public Order newOrder(Order order)
  {
    ...
  }
}
Copy to Clipboard Toggle word wrap
참고

동일한 URI 템플릿을 사용하는 하위 리소스 메서드는 하위 리소스 로케이터에서 반환된 리소스 클래스와 동일합니다.

46.5.4. 하위 리소스 검색기

하위 리소스 로케이터는 HTTP 동사 주석 중 하나로 장식되지 않으며 직접 처리하지 않도록 하위 리소스에 대한 요청입니다. 대신 하위 리소스 로케이터는 요청을 처리할 수 있는 리소스 클래스의 인스턴스를 반환합니다.

HTTP 동사 주석이 없는 경우 하위 리소스 로케이터도 엔터티 매개 변수를 가질 수 없습니다. 하위 리소스 로케이터 메서드에서 사용하는 모든 매개변수는 47장. 리소스 클래스 및 메서드에 정보 전달 에 설명된 주석 중 하나를 사용해야 합니다.

예 46.8. “하위 리소스 검색기에서 특정 클래스를 반환” 에 표시된 대로 하위 리소스 로케이터를 사용하면 모든 메서드를 하나의 슈퍼 클래스에 두는 대신 리소스를 재사용 가능한 클래스로 캡슐화할 수 있습니다. processOrder() 메서드는 하위 리소스 로케이터입니다. URI 템플릿 /orders/{orderId}/ 에 일치하는 URI에서 요청이 생성되면 Order 클래스의 인스턴스를 반환합니다. Order 클래스에는 HTTP 동사 주석으로 장식되는 메서드가 있습니다. PUT 요청은 updateOrder() 메서드에서 처리합니다.

예 46.8. 하위 리소스 검색기에서 특정 클래스를 반환

...
@Path("/customerservice/")
public class CustomerService
{
  ...
  @Path("/orders/{orderId}/")
  public Order processOrder(@PathParam("orderId") String orderId)
  {
    ...
  }

  ...
}

public class Order
{
  ...
  @GET
  public Order getOrder(@PathParam("orderId") String orderId)
  {
    ...
  }

  @PUT
  public Order updateOrder(@PathParam("orderId") String orderId,
                           Order order)
  {
    ...
  }

}
Copy to Clipboard Toggle word wrap

하위 리소스 로케이터는 런타임에 처리되어 다형성(polymorphism)을 지원할 수 있습니다. 하위 리소스 로케이터의 반환 값은 일반 오브젝트, 추상 클래스 또는 클래스 계층 구조의 최상위가 될 수 있습니다. 예를 들어, PayPal 주문 및 신용 카드 주문을 모두 처리하는 데 필요한 서비스가 있는 경우 예 46.8. “하위 리소스 검색기에서 특정 클래스를 반환”processOrder() 방법은 변경되지 않을 수 있습니다. ppOrderccOder 라는 두 개의 클래스를 구현해야 합니다. 이 클래스는 Order 클래스를 확장했습니다. processOrder() 구현에서는 필요한 논리에 따라 필요한 하위 리소스의 구현을 인스턴스화합니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat