43

パスの最後の部分がオプションであるサービスがあります。ユーザーは/mypath//mypath/param1/の両方を入力できます。

正規表現を使用してパスの最後の部分をフィルタリングしようとしました:

@Path("/mypath{param1: (/param1)?}")

JAX-RS プロバイダーとして RestEasy を使用しており、コードは Tomcat で期待どおりに動作しますが、JBoss にデプロイすると、オプション部分を送信しないと 405 リターン コードが返されます。

ここで何か間違ったことをしていますか、それとも移植可能な方法でこれを達成することはできませんか?

4

4 に答える 4

45

問題は、コロンの前に空白がないことでした。

@Path("/mypath{param1: (/param1)?}")

する必要があります:

@Path("/mypath{param1 : (/param1)?}")

仕様ではコロンの周りの空白がオプションになっているため、明らかにこれはバグです。また、私はこのバグに最初に噛まれたのではないこともわかりました。

于 2011-03-29T11:36:31.820 に答える
10

私の場合、次の別の表現を使用する必要がありました。

@Path('/mypath/{param1 : (\\w+)?}')

それ以外の場合は、パラメーターを消去する必要があります。

于 2013-10-24T02:09:43.460 に答える
2

/mypath で別のメソッドを受け入れるパスが既に定義されているかどうかを確認します。これが、405 (メソッドが許可されていません) を返す理由である可能性があります。また、オプションのパラメーターがある場合は、それらをクエリパラメーターにする方がよいと思います。

于 2011-03-28T15:01:10.167 に答える