web-dev-qa-db-ja.com

Jax-RSのオプションの@PathParam

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

正規表現を使用して、パスの最後の部分をフィルター処理しようとしました。

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

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

ここで何か間違ったことをしているのでしょうか、それをポータブルな方法で達成することはできませんか?

37
Fábio

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

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

する必要があります:

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

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

41
Fábio

私の場合、他の式を使用する必要がありました。

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

それ以外の場合は、パラメーターをクリーニングする必要があります。

8
aruizca

別のメソッドを受け入れる/ mypathで既に定義されているパスがあるかどうかを確認します。これは、405(メソッドは許可されていません)を取得している理由です。また、オプションのパラメーターがある場合は、パラメーターを照会することをお勧めします。

1
Prasanna