パスの最後の部分がオプションのサービスがあり、ユーザーは/ mypath /と/ mypath/param1 /の両方を入力できます。
正規表現を使用して、パスの最後の部分をフィルター処理しようとしました。
@Path("/mypath{param1: (/param1)?}")
RestEasyをJAX-RSプロバイダーとして使用しており、コードはTomcatで正常に機能しますが、JBossでデプロイすると、オプション部分を送信しないと405リターンコードが返されます。
ここで何か間違ったことをしているのでしょうか、それをポータブルな方法で達成することはできませんか?
問題はコロンの前に空白がないことでした:
@Path("/mypath{param1: (/param1)?}")
する必要があります:
@Path("/mypath{param1 : (/param1)?}")
specification によりコロンの周りの空白がオプションになるため、明らかにバグです。また、私は最初ではないこともわかりました このバグに噛まれた 。
私の場合、他の式を使用する必要がありました。
@Path('/mypath/{param1 : (\\w+)?}')
それ以外の場合は、パラメーターをクリーニングする必要があります。
別のメソッドを受け入れる/ mypathで既に定義されているパスがあるかどうかを確認します。これは、405(メソッドは許可されていません)を取得している理由です。また、オプションのパラメーターがある場合は、パラメーターを照会することをお勧めします。