12

JAX-RS では、1 つのパスに複数のクラスを割り当てることは可能ですか? 私はこのようなことをしようとしています:

@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 つ作成してから、ヘルパー クラスに委譲できます。私はそうする標準的な方法があることを望んでいました。

4

3 に答える 3

3

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

それにかんする:

リクエストを処理するクラスを 1 つ作成してから、ヘルパー クラスに委譲できます。私はそうする標準的な方法があることを望んでいました。

通常、パスと同じ名前のリソース クラスがあります。

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

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response handlePost() {
       ...
    }
}
于 2012-08-23T18:13:20.457 に答える
2

複数のリソースを同じパスにマップすることはできません。数日前に試してみたところ、同様のエラーが発生しました。

あるリソースには /api/contacts 、別のリソースには /api/tags などのサブパスを作成することになりました。

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

于 2012-08-24T18:41:18.820 に答える