2011-12-19 18 views
2

自分のメソッドに@NotNullアノテーション(または@Requiredなど)を使用したいと思います。これはControllerクラスとModelクラスではうまく機能しますが、私自身はそれを動作させることはできません。これはおそらく、net.sf.ovalの質問のほうが、フレームワークを演じるものです。しかし、それは接続されているかもしれない、私は知らない。net.sf.oval(再生フレームワーク内)でのパラメータ検証

は、私のようなクラスを持っている:

@net.sf.oval.guard.Guarded 
public class SimulatorWrapper { 

    public SimulatorWrapper setRedCode(@play.data.validation.Required @net.sf.oval.constraint.NotNull final String redCode) { 
     // just gessing here: 
     if(Validation.hasErrors()) throw new RuntimeException("invalid argument"); 
     if(redCode == null) throw new RuntimeException("null"); 
     // do stuff 
     return this; 
    } 
} 

私はnullパラメータを使用してこのメ​​ソッドを呼び出す

私の例外がスローされますが、@NotNullと@Requiredは全く何もしないように見える場合。私は間違って何をしていますか? プレイフレームワークプロジェクトには楕円1.5が付属していました。私は1.8をダウンロードし、古いものに問題があった場合に備えて、それをEclipseのクラスパスに追加しました。

私は "play test my-server"でサーバーを起動していますが、ブラウザで私のウェブサイト(まだテストではなく、単純なサイト)に移動します。

ありがとう、アレックス

P.S.私は "nullは悪い"議論を知っているが、私はそれを変更することができないようにコードの残りの部分にアクセスすることはできない。

答えて

1

検証クラスは、コントローラアクションが呼び出されたときにのみ、Playフレームワークによって検証注釈をチェックするために呼び出されます。

あなたがコントローラではないですので、アノテーションの検証が実行されず、必要なannotionは(Validation.hasErrorsになりません)

代わりにアノテーションを使用する、次のようなメソッドを使用することができます: Validation.required(redCode); // nullをチェックします。 その後、Validation.hasErrors()を呼び出すと正常に動作します。

しかし、Validation.hasError()のエラーがコントローラのアクション呼び出しの検証から来て、副作用を引き起こす可能性があるため、これを行うべきではないと思います。

例のようなことをしたい場合は、再生の検証クラスに頼るべきではありません。

正しい場所で検証していますか?

+0

こんにちは、まずはお返事ありがとうございます。もちろんこれはバリデーションを使うのに間違った場所ですが、私は変更できない本当にばかげたコードを扱っていますので、私の関数のすべての単一のパラメータに@NotNullを追加したいと思います。 (将来的にはさらに制限があります)。 – Alex

+0

hupsはそれを送信しました。とにかく、私はnet.sf.ovalを使用することを考えていました - それはそのライブラリの目的ですか?あなたが演奏のバリデーションを言ったように、コントローラとモデルのための唯一のmentです。現在、私はたくさんの "if(... == null)throw ..."を持っています。 – Alex

+0

私は今void test(@NotNull String a){new Validator()。assertValid(a); } nullを渡すと失敗します。しかし、それはnullを使用してスローするのとほとんど同じです。私が理解する限り、私は自動化のためのaspectjコンパイラを使用する必要がありますが、私はプレイフレームワークでそれを行う方法については何も見つかりません。 – Alex

1

誰もがまだこれを必要とする場合。

すべてのクラスのPlayアノテーションを使用して、コントローラとまったく同じ方法で検証できます。 validateプラグインをそのまま使用してください。

関連する問題