2010-11-18 3 views
4

私はSpringでフォームを検証できますが、同様の検証をURLパラメータに適用できますか?たとえば、次のように私は私のコントローラ内のメソッドを持っています。Spring Frameworkリク​​エストパラメータまたはパス変数を検証する

public String edit(@PathVariable("system") String system, 
    @RequestParam(value="group") String group, 
    ModelMap model) throws DAOException { 

は、私は方法の前にsystemgroupの値を検証することができ、彼らは一定の価値があるか、特定の正規表現に一致することを確認するために、呼ばれているのですか?

ありがとうございました

+1

完全な答えを提供する時間がないので、コメントだけです:メソッド拡張を追加するまで、JSR-303で行うことはできませんが、AOPで行うことができます。 – GaryF

答えて

0

あなたはこれにSpring Assertを使用することができます。 Assert API(http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/Assert.html)は、指定されたパラメータに対して指定された式を実行し、その式が偽それは例外をスローします。

例: Assert.isTrue(system.equals( "ValidSystemName")、 "有効なシステムを指定する必要があります");また、パラメータがnullではないか、空の文字列でないことを確認するための機能が含まれてい

など

0
  • を検証する必要があるパラメータをマークし、アノテーションを作成します。この注釈は、@RetentionRUNTIME@TargetElementType.PARAMETERである必要があります。
  • AspectJ Aspectとして実装されたバリデータを作成します。
  • このバリデータでコントローラを呼び出します。

サンプル注釈:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.PARAMETER) 
@Documented 
public @interface ValidSystemParameter { 
} 

サンプルバリ:

@Aspect 
public class ValidSystemParameterValidator { 
    @Pointcut("TODO: write your pointcut expression") 
    public void controllerMethodWithValidSystemParameter(); 

    @Before(pointcut = "controllerMethodWithValidSystemParameter()") 
    public void validateSystemParameter(String systemParameter) { 
     // validate the parameter (throwing an exception) 
    } 
} 

AspectJのポイントカット表現言語を参照してくださいについて学ぶために:http://www.eclipse.org/aspectj/doc/released/progguide/language-joinPoints.html

は春にAspectJの統合について学ぶために参照:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html#aop-ataspectj

0

少し遅れているかもしれませんが、Spring 3.0では@Valid注釈付きのJSR-303検証を使用することができます。 @DateTimeFormat@NumberFormatというように、より具体的な注釈もあります。ここでは詳細:私はそれを見たようhttp://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/validation.html#validation-mvc 次の2つのオプションがあります:

  • をオブジェクトとユーザーJSR-303 検証など、あなたのリクエストパラメータを定義します。
  • 上記のようにAssert APIを使用してください。

あなただけの単一の値の簡単な検証を行いたい場合は、私は(それは私が最大値をチェックするために、単純なint型の値を持っていたとき、私がやったことだ)、後者で行くだろう。

関連する問題