users@jersey.java.net

[Jersey] Root resource as a resource factory (to handle _at_Path("/") as well)

From: Martynas Jusevi?ius <martynas_at_graphity.org>
Date: Fri, 12 Oct 2012 10:10:06 +0300

Hey again,

how can turn a single root resource into a resource factory that
handles all requests through sub-resource locators -- *including* the
base URI @Path("/")?
I tried the following but I get 405 Method not allowed:

@Path("/")
public class RootResource
{

    @Path("{path: .+}")
    public Resource getResource()
    {
        return new Resource();
    }

}

I guess Jersey expects @GET etc. on the RootResource -- but I want
@Path("/") to be handled by getResource() as well.
I haven't found any requirements for root resources to contain
resource methods e.g. GET - but maybe @Path("/") is a special case?

Is this possible with JAX-RS/Jersey?

I found a very similar dynamic dispatching example in the book
"RESTful Java with JAX-RS" -- however not with the base @Path("/"):

@Path("/customers")
public class CustomerDatabaseResource {
   protected CustomerResource europe = new CustomerResource();
   protected FirstLastCustomerResource northamerica =
                              new FirstLastCustomerResource();
   @Path("{database}-db")
   public Object getDatabase(@PathParam("database") String db) {
      if (db.equals("europe")) {
          return europe;
      }
      else if (db.equals("northamerica")) {
          return northamerica;
      }
      else return null;
   }

Martynas
graphity.org