1

特定のパスに対応するように注釈が付けられた REST リソースの基本コレクションがあります。疑似コード:

@Path("/collection")
class Stuff {

  @Path("/{id}")
  @GET
  public String get(@PathParm("id") int id) {
    return String.format("Item #%d". id);
  }
}

ここで、 class を変更せずにこのコレクションにサブリソースを追加する必要があります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 にアップグレードすると、StuffRESTeasy が可能なパスの一致を探しているときにクラスがシャドウイングされ、アプリの構造全体が壊れているように見えます。これは 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);
      }
    }
  }
}
4

1 に答える 1

0

RestEasy 3.x は、JAX-RS の新しい仕様更新である JAX-RS 2.0 に基づいています。

RestEasy を管理している開発者は、変なパス マッチング アルゴリズムに関するブログ記事を既に書いています。

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

あなたの場合、RestEasyがマッチングアルゴリズムの実装についてそれほど厳密ではない古い仕様を実装していたため、以前は機能していた可能性がありますが、現在は機能しない可能性があります..

コードを反映し、リソースを適切に定義する方が良いでしょう!

于 2013-09-25T14:29:04.213 に答える