2

JSX-RS を使用してサービスを実装しようとしていますが、バージョン番号が異なる複数のタイプのリクエストを単一のメソッドで処理する必要がある状況があります。

@Path("/url1/url2{version: [[/v][0-9][.][0-9]]*}")

これは対応する必要があります-

/url1/url2
/url1/url2/v1
/url1/url2/v1.2

ここで、バージョンはそれぞれ 0、1、および 1.2 になります。

私は正しい正規表現を持っていますが、コードはそれを受け入れないよう ((/v[0-9])(.[0-9])?)です? 私はここで混乱しています。

v の後と小数点 (.) の後に 1 桁だけに制限する必要があり、/v* は 1 回だけ出現する必要があります。例えば ​​-

/ur1/url2/v1v1禁止されている

また、小数点を含む URL がある場合、それを解析するのにより多くの時間がかかるのでしょうか。URL エンコードする必要がありますか? 他の提案をいただければ幸いです。

別のアプローチは、すべてのバージョンに対してです。@path パラメータを使用した別の方法があります。最終的に最良の解決策はどれですか?

提案やアイデアは大歓迎です!!!

4

1 に答える 1

1

わかりました、これは私が行う方法です:

まず、 のvようなパターンを受け入れる必要があるため、 はオプションです/url1/url2。だから、私はから始めます:

(/v)?

?ゼロまたは 1 回を意味します。

ここで、a を付ける場合は、/vその後にバージョン番号 (つまり ) を付ける必要がありますが、それは最初に/v1付けた場合のみですよね?/v

やや好き:(/v\d)?

\dデフォルトでは 1 であるため、数字の量指定子を指定する必要はありません。?そして、量指定子のおかげで、グループ全体がゼロ回または 1 回出現する可能性があります。

ここで、バージョン番号を入力する場合、オプションで、ドットで区切られた 2 番目のバージョン番号を入力できます (つまり/v1.1)。ただし、これは最初にバージョン番号を使用する場合にのみ有効であり、このグループはオプションです。表示される場合は、一度だけ表示される必要があるため?、このグループに量指定子を再度使用できます。

したがって、次のようになります。

(/v\d(\.\d)?)?

\.ここで a を使用して、ここで「ドット」が必要であることを示していることに注意してください。.は任意の文字を表す事前定義された正規表現文字クラスであるため、これをエスケープして、".".

したがって、これはあなたが提供したすべてのテストシナリオで機能します。

于 2013-01-11T23:36:08.037 に答える