4

RESTEasy は末尾のスラッシュを無視するように見えるため、末尾のスラッシュがある場合とない場合の 2 つの異なる Web サービスを記述することはできません。この例は次のとおりです。

@Path("foo")
public class TestClass {

    @GET
    @Path("/bar")
    public Response bar1() {
        ...
    }

    @GET
    @Path("/bar/")
    public Response bar2() {
        ...
    }
}

RESTEasy では、/foo/bar および /foo/bar/ への GET リクエストは bar2() によって処理されます。RFC3986 と JAX-RS 仕様を考慮すると、これがこのように処理される理由がわかりません。これは RESTEasy の問題でしょうか、それとも私が監視しているものでしょうか?

4

1 に答える 1

4

これがJAX-RS仕様の内容です

3.7リクエストとリソースメソッドの照合

3.7.3URIテンプレートの正規表現への変換

  1. URIはテンプレートをエンコードし、URIテンプレート変数の指定を無視します。
  2. 再びURIテンプレート変数の指定を無視して、URIテンプレート内の正規表現文字をエスケープします。
  3. 各URIテンプレート変数を、指定された正規表現を含むキャプチャグループに置き換えます。正規表現が指定されていない場合は、「([^ /] +?)」を使用します。
  4. 結果の文字列が「/」で終わる場合は、最後の文字を削除します。
  5. '(/.*)?'を追加します 結果に。

私が読んでいると、RESTEasyは仕様を正しく実装しています。

于 2013-03-05T04:17:36.873 に答える