2009-03-25 10 views
0

私は検証が必要なオブジェクトを持っています。このオブジェクトには、ヌルにすることができないプロパティ、指定されたサイズを超えることのできない文字列、フォーマットの正確性をチェックする必要のある日付文字列があります。オブジェクトのバリデーション

この検証はどのように実行しますか?私はどのように知らない任意のセッターの検証も無用になるよう

このオブジェクトWebサービスの入力に使用されます。私は、私はよりダイナミック

EDITが何かを探しています、全体のオブジェクトの上に行きたくありませんシステムは、正確なシナリオがなけれカスタムソリューション(はい私は車輪の再発明知っている)

答えて

1

Webサービスのサーバー側でオブジェクトを検証する必要があるようです。もしそうなら、あなたの状況に私が示唆している答えが当てはまるかもしれません。

あなたが疑う余地はありませんが、オブジェクトのフィールドを検証する方法はいくつかあります。しかし、あなたは何をする必要があるかを知っています:各フィールドをチェックして、その値が有効かどうかを確認します。ここには魔法はありません。フィールドをチェックするだけです。

バリデーションコードを1か所に保存したい場合は、バリデーションロジックを含むxmlスキーマを作成し、そのクラスからクラスを生成し、スキーマを参照として使用します。これにより、検証コードとクラスを簡単に保守することができます。スキーマを更新し、クラスを再生成するだけです。 (私はクラスをソース管理にとどめません。コードをコンパイルする前に生成してください。これはあなたのクラスがあなたのスキーマと常に同期していることを保証します。)これはJavaのためのライブラリ(JAXB、おそらく?)があると確信していますが、私は何年もJavaを使っていません。多くの言語で共通することはです。です。

1

を探しているのアノテーションベースのシステム

イムの追加依存して動作します、私はあなたがオブジェクトのsetterメソッドを使用することをお勧めすることができます(あなたはでしたフィールドを非公開にします、右?)を使って値のすべての変更を検証します。文字列のセッターはこのことができます

希望、

のYuval = 8)

+0

これは内部にPOJOロジックがない必要があります。助けのためのthx –

+0

POJOは内部の論理を意味しません。 – CoverosGene

+0

@ NunFur:サービスになることをうれしく思います。おそらくあなたは「豆」と言うことを意味しましたか? = 8-) – Yuval

1

チェックHibernate Validatorなど、日付のセッターは、フォーマット、検証コードを呼び出すことができ、長さの検証コードを呼び出すことができます。

+0

リンクのthx、注釈を避けようとしていますが、1つの解決策はoValを使用することですが、私はカスタムソリューションを探していました。特定のフレームワークを探すのではなく、ソリューション、アルゴリズム –

+0

なぜアノテーションを避けるのですか? – trunkc

+0

このオブジェクトはwebservicesで使用されますが、どのように依存関係が追加されて動作するか分かりません。とにかく私は上記のように私はカスタムソリューションを探していた。 (はい、私は車輪を再発明することを知っている)= D –

0

を見てください、あなたがオブジェクトのプロパティを設定する前に、あなたの検証を行うことを提案します。たとえば、文字列から解析しているintプロパティがある場合は、それを設定する前にnull、空の文字列、数値などをチェックする必要があります。とにかくタイプの問題に遭遇します。また、誤った値をユーザーに表示したい場合は、元の文字列を保持する必要があります。

これはWebアプリケーションの場合、この部分を行うためのフレームワークがたくさんあり、すでに検証済みで型保証された値でオブジェクトを初期化します。 StrutsやSpring MVCが気になりますが、私はWeb開発者ではありません。彼らはあなたのオブジェクトとそれに関連するバリデーションについて説明する何らかのXML構成を使用します。これがウェブ上のものではない場合は、エラーを処理してエラーページを直接ユーザーに表示したいので、ややこしいことになるかもしれません。

少し下がってみてください。Apache Commons Validator

1

Webサービスの基本検証は、WSDL/XSDレベルで処理されます。