2012-08-23 18 views
9

JAX-RS ile, tek bir yola birden fazla sınıf atanmış olabilir mi? Böyle bir şey yapmaya çalışıyorum:JAX-RS aynı yolla birden çok sınıf

@Path("/foo") 
public class GetHandler { 
    @GET 
    public Response handleGet() { ... 
} 

@Path("/foo") 
public class PostHandler { 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response handlePost() { ... 
} 

Bu görünüşe göre ben olsun izin verilmez:

com.sun.jersey.api.container.ContainerException: A root resource, class PostHandler, has a non-unique URI template /foo 

Hep istekleri işlemek için bir sınıfı oluşturmak ve sonra da yardımcı sınıflarına temsilci. Bunu yapmanın standart bir yolu olduğunu umuyordum.

cevap

2

JAX-RS özellikleri böyle bir eşleştirmeyi yasaklamaz. Örneğin, Resteasy JAX-RS uygulaması buna izin verir. Özellik jersey özel olmalıdır.

ilgili olarak:

Hep isteklerini işlemek ve sonra yardımcı sınıflarına temsilci bir sınıf oluşturabilir. Bunu yapmanın standart bir yolu olduğunu umuyordum.

Genellikle yolu ile aynı ada sahip kaynak sınıfları:

@Path("/foo") 
public class FooResource { 
    @GET 
    @Path("/{someFooId}") 
    public Response handleGet() { 
     ... 
    } 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response handlePost() { 
     ... 
    } 
} 
2

Aynı yolu eşleştirilmiş birden kaynaklara sahip olamaz. Birkaç gün önce denedim ve benzer bir hataya düştüm.

Bir kaynak için/api/contacts gibi bir alt yol ve başka biri için/api/tag gibi alt yollar yaptık.

Diğer tek yol, birden çok pakette kaynak oluşturmak ve ardından her biri için farklı uygulamalar oluşturmaktır.