【问题标题】:Can I overcome colliding base @Path in Jax-RS?我可以克服 Jax-RS 中的碰撞基础@Path 吗?
【发布时间】:2013-09-25 11:21:22
【问题描述】:

我有一个 REST 资源的基本集合,这些资源经过注释以对应于某些路径。 伪代码:

@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 中工作,但现在,当 RESTeasy 正在寻找可能的路径匹配时,升级到 3.0.4 版本似乎会影响 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);
      }
    }
  }
}

【问题讨论】:

    标签: java tomcat tomcat7 jax-rs resteasy


    【解决方案1】:

    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 正在实施旧规范,该规范对匹配算法的实施并不那么严格,现在可能无法工作..

    最好是您反映代码并适当地定义资源!

    【讨论】:

    • 哇,我同意作者的观点,即 JAX-RS 2 规范很差。它使这个用例非常复杂。
    • 但他将我指向docs.jboss.org/resteasy/docs/3.0.4.Final/userguide/html/… 的迁移指南,其中他提到了一个可以帮助我的开关:“我添加了一个配置开关,以便 Resteasy 将忽略 Spec 定义的类表达式过滤步骤,而是根据每个 JAX-RS 方法的完整表达式进行匹配。”​​
    猜你喜欢
    • 2014-12-11
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多