JAX-RS具有相同路径的多个类

时间:2012-08-23 17:43:57

标签: java jersey jax-rs

使用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

我总是可以创建一个类来处理请求,然后委托给辅助类。我希望有一种标准的方法。

3 个答案:

答案 0 :(得分: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() {
       ...
    }
}

答案 1 :(得分:2)

您不能将多个资源映射到同一路径。几天前我试了几次并且出现了类似的错误。

我最终做了一个资源的/ api / contacts和另一个资源的/ api / tags等子路径。

唯一的另一个方法是在多个包中创建资源,然后为每个包创建不同的应用程序。

答案 2 :(得分:1)

我遇到了类似的问题,将类级别的@PATH注释设置为空字符串,并将资源名称移至方法级别的@PATH注释解决了该问题。

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

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