2017-08-10 30 views
2

野菜の名前がニンジンや豆やタマネギでない場合にのみ、メソッドにアクセスしたいので、トマトを与えるとビューが返されます。私はこのURLに何か間違いがあると、以下のようにURLを使用していますか?Spring MVCの@RequestMapping()の正規表現

@RequestMapping("/**/vegetables/{name:^[carrot|beans|onions]}") 
public String vegetablesNames(){ 
    return "vegetables"; 
} 
+0

@PathVariableとして取得して関数をチェックする方が簡単ではないでしょうか? RegExpは巨大なものですが、私はむしろそれらを避けたいと思います。 – Peter777

答えて

4

あなたは、メソッド内で検証する必要があります:

@RequestMapping("/vegetables/{name}") 
public String vegetablesNames(@PathVariable String name){ 

    if (name.matches("your regex") { 
     throw new RuntimeException(name + " doesn't match"); 
    } 
    return "vegetables"; 
} 

@PathVarialbeが要求URIから抽出された変数です。あなたはそれを抽出し、あなたが望むようにそれを再生することができます。

基本的に、パスはそのURIで利用可能なリソースを記述する必要があります。リソースが利用できない場合、応答は例えばNOT_FOUNDSpringでは、RuntimeExceptionの原因となった要求に対するデフォルトの応答は5xxですが、この場合は適切ではありませんが、これは単なる例です。

ExceptionsSpringに登録することに興味がある場合は、説明を求めてください。

+1

正確に。そのパスは一般的な形式を記述するべきですが、ビジネス(または検証)ロジックは含まれていません。内部の検証は、正規表現で行うことも、リストと比較すること、データベースなどに対してチェックすることもできます。パス変数ではなく、それを変更する方がずっと簡単です。 – Kayaman

関連する問題