2011-10-18 20 views
0

私は春のデータ検証について疑問に思っています。 Springは2つの(おそらく多くの)検証オプションを提供しています。最初のオプションは、Validatorインターフェイスを使用して、自分で検証全体を作成することです。 2番目のオプションは、注釈の検証(JSR 303)を使用することです。春のデータ検証

今私は本当に混乱しています:)どの検証を選択すべきですか。必要なのは、受信したデータオブジェクトが正しいかどうかをチェックすることです(すべての必須フィールドが満たされていることを意味します)。これはJSR 303の検証または「Validatorインスタンス」を使用した自分のバリデーターで行うことができます。しかし、私はまた、このデータオブジェクトがいくつかのデータベース制約に対して有効であるかどうかをチェックする必要があります(バリデーターはデータベース内のいくつかのデータをチェックする必要があり、eq。はこのIDを登録したユーザーです...)バリデータ。

どの方法が最適であるかわかりません。両方を組み合わせるか、自分のバリデータを作成しますか? (コメントから移転)

私が何かアドバイスに感謝される...

更新

[OK]を、私はライアンの例を踏襲し、私は成功だったと思います。私は独自のSpring Validatorの実装を作成し、このValidatorでは@ Autowire-d javax JSR 303インスタンスを作成しました。しかし、その注射に問題がありました。私は設定していましたが、このコードはいくつかの例外を引き起こしました。なぜなら、SpringはどのValidatorを注入したいのか分からなかったからです。だから私はそのコードを削除しました。

最後に、「検証」メソッドの2番目のパラメータとして必要なErrorsプロパティを取得できる場所がわからないため、春のValidator実装を削除しました。私はサービスレイヤーからその検証を手動で起動しています。私は本当にそのエラーオブジェクトを取得できるのか分かりません。

ところで、私はその検証をどのように実装するのか別の解決策を見つけました。私はLocalValidatorFactoryBeanでバリデータクラスを拡張しようと考えています。両方のValidatorインタフェースを実装するLocalValidatorFactoryBeanクラス(Spring Validator + JSR 303)。しかし、私はこの良いアプローチがあるかどうかはわかりません。このアプローチでは、Errorオブジェクトも必要です。このオブジェクトは、どこから検索するかわかりません。

更新 エラーオブジェクトは「BindException」からのものです。

FooObjectVO myObject = new FooObjectVO(); 
BindException errors = new BindException("fooObject", myObject); 

答えて

1

実際には別々のオプションではありません。 SpringのJSR 303はalso implements its own Validator interfaceをサポートしているので、どちらか一方を選択する必要はありません。どのような方法であれ、実装をミックスして一致させることができます。

+0

私はあなたのことを正しく理解しているかわかりません。そのValidatorインターフェイスを実装して、2つの実装を1つに結合することをお勧めしますか?または、私自身のアノテーション制約を作成することを指していますか?私のコメントが少しばかだと申し訳ありませんが、私は春の検証では初心者です(春はまあまあです)。 JSR 303と私自身の検証をどのように組み合わせるか、小さな例や小さなガイドを教えてください。 – Peter

+0

さて、Springの「Validator」インターフェイスの独自の実装を記述し、SpringのJSR 303 'Validator'のインスタンスをそれに挿入する方法があります。次に、基本的なフィールド検証のためにJSR 303バリデーターを呼び出し、独自のカスタム検証を行います。 –

+0

@Peter:あなたの質問(または新しい質問)を更新したときにコメントに投稿してはいけません。私はあなたの質問にあなたの更新を移動しました、私はあなたのコメントを削除するためにフラグを立てています。 –

0

このような場合は、両方を組み合わせることをお勧めします。私はできる限り何でもJSR 303バリデーションを使いたいです。私は自分のバリデーターでそれを補う。