Java 我能克服Jax-RS中base@Path的冲突吗?

Java 我能克服Jax-RS中base@Path的冲突吗?,java,tomcat,tomcat7,jax-rs,resteasy,Java,Tomcat,Tomcat7,Jax Rs,Resteasy,我有一个REST资源的基本集合,这些资源被注释为对应于某些路径。 Psuedo代码: @Path("/collection") class Stuff { @Path("/{id}") @GET public String get(@PathParm("id") int id) { return String.format("Item #%d". id); } } 现在,我需要在不更改类内容的情况下将子资源添加到此集合,但添加如下代码不起作用: @Path("/col

我有一个REST资源的基本集合,这些资源被注释为对应于某些路径。 Psuedo代码:

@Path("/collection")
class Stuff {

  @Path("/{id}")
  @GET
  public String get(@PathParm("id") int id) {
    return String.format("Item #%d". id);
  }
}
现在,我需要在不更改类内容的情况下将子资源添加到此集合,但添加如下代码不起作用:

@Path("/collection/{id}")
class StuffPlugin {

  @Path("/extra")
  @GET
  public String extra(@PathParm("id") int id) {
    return String.format("Extra info about item #%s", id);
  }
}
这曾经在RESTeasy 2.3中起作用,但现在升级到3.0.4版,后者似乎在RESTeasy查找可能的路径匹配时隐藏了Stuff类,从而破坏了我的应用程序的整个结构。 如何在RESTeasy 3中实现这一点

多谢各位

附言 我正在以如下所示的编程方式添加提供程序类,所有没有冲突基路径的类都可以正常工作

public class EntryPoint extends Application {
  public EntryPoint() {}

  @SuppressWarnings("serial")
  @Override
  public Set<Class<?>> getClasses() {
    return new HashSet<Class<?>>() {
      {
         add(Stuff.class);
         add(StuffPlugin.class);
      }
    }
  }
}

RestEasy 3.x基于JAX-RS 2.0,这是JAX-RS中的一个新规范更新

维护RestEasy的开发人员已经写了一篇关于奇怪的路径匹配算法的博文

在您的例子中,它可能在较早的时候起作用,因为RestEasy正在实现旧规范,而旧规范对匹配算法的实现没有那么严格,现在可能不起作用


最好是反射代码并适当地定义资源

哇,我同意作者的说法,JAX-RS2规范很差。这使得这个用例非常复杂,但他向我指出了迁移指南,在那里他提到了一个可能会帮助我解决问题的开关:我添加了一个配置开关,这样Resteasy就可以忽略规范定义的类表达式过滤步骤,而是根据每个JAX-RS方法的完整表达式进行匹配。