2

独自のメソッドに @NotNull アノテーション (または @Required など) を使用したいと考えています。これは Controller および Model クラスでは非常にうまく機能しますが、私自身ではうまく機能しません。これはおそらく net.sf.oval の質問であり、play フレームワークです。しかし、それは接続されている可能性があります。

私は次のようなクラスを持っています:

@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 パラメータを指定してこのメ​​ソッドを呼び出すと、if によって例外がスローされますが、@NotNull と @Required はまったく何もしないようです。私は何を間違っていますか?Play フレームワーク プロジェクトには楕円形の 1.5 が付属していました。1.8 をダウンロードし、古いプロジェクトに問題があった場合に備えて、Eclipse のクラスパスに追加しました。

「play test my-server」でサーバーを起動してから、ブラウザーで自分の Web サイト (まだテストではなく、単純なサイト) に移動します。

ありがとう、アレックス

PS「ヌルは悪」の議論は知っていますが、残りのコードにアクセスできないため、それを変更することはできません。

4

2 に答える 2

1

誰かがまだこれを必要としている場合に備えて。

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

于 2012-12-10T09:46:44.847 に答える
1

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

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

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

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

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

適切な場所で検証を使用していますか?

于 2011-12-20T20:22:12.657 に答える