이 콘텐츠는 선택한 언어로 제공되지 않습니다.

Chapter 14. JAX-RS Resource Locators and Sub Resources


Resource classes can partially process a request and then provide another sub-resource object to process the remainder of the request. For example:
@Path("/")
public class ShoppingStore {

   @Path("/customers/{id}")
   public Customer getCustomer(@PathParam("id") int id) {
      Customer cust = ...; // Find a customer object
      return cust;
   }
}


public class Customer {
   
    @GET
    public String get() {...}

    @Path("/address")
    public String getAddress() {...}

}

Resource methods with a @Path annotation and no HTTP method are considered sub-resource locators. They provide an object that can process the request. In the previous example code, ShoppingStore is a root resource because its class is annotated with @Path. The getCustomer() is a sub-resource locator method.
If the client invoked the following:
GET /customer/123
Then the ShoppingStore.getCustomer() method would be invoked first. This method provides a Customer object that can service the request. The HTTP request will be dispatched to the Customer.get() method. Another example is:
GET /customer/123/address
In this request, again, first the ShoppingStore.getCustomer() method is invoked. A Customer object is returned, and the rest of the request is dispatched to the Customer.getAddress() method.
Another interesting feature of sub-resource locators is that the locator method result is dynamically processed at runtime in order to determine how the request should be dispatched. This means that the ShoppingStore.getCustomer() method does not have to declare any specific type.
@Path("/")
public class ShoppingStore {

   @Path("/customers/{id}")
   public java.lang.Object getCustomer(@PathParam("id") int id) {
      Customer cust = ...; // Find a customer object
      return cust;
   }
}


public class Customer {
   
    @GET
    public String get() {...}

    @Path("/address")
    public String getAddress() {...}

}

In the previous example, getCustomer() returns a java.lang.Object. Per request, at runtime, the JAX-RS server will determine how to dispatch the request based on the object returned by getCustomer(). This can be useful in certain situations.
For example, say you have a class hierarchy for your customers. Customer is the abstract base, and CorporateCustomer and IndividualCustomer are subclasses. In this case, your getCustomer() method might perform a Hibernate polymorphic query without requiring any understanding of the concrete class it queries, or the content returned.
@Path("/")
public class ShoppingStore {

   @Path("/customers/{id}")
   public java.lang.Object getCustomer(@PathParam("id") int id) {
      Customer cust = entityManager.find(Customer.class, id);
      return cust;
   }
}


public class Customer {
   
    @GET
    public String get() {...}

    @Path("/address")
    public String getAddress() {...}

}

public class CorporateCustomer extendsCustomer {
   
    @Path("/businessAddress")
    public String getAddress() {...}

}

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동