有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JAXR使用相同路径创建多个类

使用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) 个答案

  1. # 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
      }
    }
    
  2. # 2 楼答案

    JAX-RS规范并不禁止这种映射。例如,Resteasy JAX-RS实现允许它。该功能应该是特定于球衣的

    关于:

    I can always create one class to handle requests and then delegate to helper classes. I was hoping there was a standard way of doing so.

    通常,资源类与路径同名:

    @Path("/foo")
    public class FooResource {
        @GET
        @Path("/{someFooId}")
        public Response handleGet() {
          ...
        }
    
        @POST
        @Consumes(MediaType.APPLICATION_JSON)
        public Response handlePost() {
           ...
        }
    }
    
  3. # 3 楼答案

    不能将多个资源映射到同一路径。几天前我试过了,结果也犯了类似的错误

    最后,我为一个资源执行了子路径,例如/api/contacts,为另一个资源执行了/api/tags

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