3

すべての可能なパス パラメータの深さをキャプチャするために設定する正規表現は何ですか@Path("<what_regex>")(他の方法で処理されることを意図した特定のパスを除く)?

お気に入り:

/{path1}/{path1}/{path1}/{path1}/{path1}/等々

まだこれらをマップしている間:

/create
/read
/update
/delete

他の Jax-rs リソース メソッドへ。

@Singleton
@Path("/")
public class MyRest {
    @GET
    @Path({pathParam}) /* This works */
    public Response getSomething(...){}

    @POST
    @Path("create") /* Along with this */
    public Response createSomething(...){}

    // and so on
}
4

1 に答える 1

17

まず第一に/{path1}/{path1}/{path1}/{path1}/{path1}/、未定義の数のパラメーターを 1 つの正規表現だけで照合することはできないため、おそらくこれらをキャッチすることはできません。

そうは言っても、使用されている正規表現エンジンは Java のもの (かなり論理的) のようです。そのため、キーワードをキャッチしていないことを確認するために、否定的な先読みを使用できます。だから私はあなたがそのようなものを持つことができると思います:

@Path("/{path: (?!create|read|update|delete).*}")

次に、「/」を区切り文字として使用して、パス var を分割します。

まだ。一般的なケースが最後にチェックされるように、関数を注文することはできませんか? 一番簡単だと思います...

次に、使用する必要があります:

@Path("/{path: .*}")

これはより簡単で、ボイラープレートが少なくなります。

編集:
正確には、最初の URL は "/create/anythingelse" のような URL には一致しません。これは単に /create を禁止しているためです (もちろん、同じことが他のキーワードにも当てはまります)。

于 2013-04-08T12:46:22.407 に答える