我可以在Jax-RS中克服碰撞基础@Path吗?

时间:2013-09-25 11:21:22

标签: 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);
  }
}

现在,我需要在不更改类Stuff的情况下向此集合添加子资源,但添加如下代码不起作用:

@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中实现这一目标?

谢谢


PS

我正在以编程方式添加提供程序类,如下所示,没有碰撞基本路径的所有内容都正常工作。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

http://bill.burkecentral.com/2013/05/29/the-poor-jax-rs-request-dispatching-algorithm/

在你的情况下,它可能早期工作,因为RestEasy正在实现旧的规范,这对于匹配算法的实现不是那么严格,现在可能无法正常工作..

最好是你反思代码并适当地定义资源!