2012-08-23 8 views
9

JAX-RSでは、複数のクラスを1つのパスに割り当てることはできますか?同じパスのJAX-RS複数クラス

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

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

私が得るように、これは明らかに許可されていません:

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

私は常に要求を処理して、ヘルパークラスに委任する1つのクラスを作成することができます私はこのような何かをしようとしています。私はそうする標準的な方法があることを望んでいた。

答えて

2

JAX-RS仕様では、このようなマッピングは禁止されていません。例えば、Resteasy JAX-RSの実装はそれを可能にします。この機能はジャージ特有のものでなければなりません。

について:

私は常に要求を処理して、ヘルパークラスに委譲する一つのクラスを作成することができます。私はそうする標準的な方法があることを望んでいた。

は、通常はパスと同じ名前のリソースクラスを持っている:

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

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

あなたが同じパスにマッピングされた複数のリソースを持つことはできません。私は数日後にそれを試み、同様のエラーで上陸しました。

私は、1つのリソースに対して/ api/contactsなどのサブパスや、別のリソースに対して/ api/tagsなどのサブパスを作成しました。

他の方法は、複数のパッケージにリソースを作成し、それぞれに異なるアプリケーションを作成することです。

関連する問題