私はHibernate Validator API
を使用してオブジェクトのフィールドを検証しています。見た目の例は以下の通りです。JSR 303は制約違反で例外をスローします
@NotNull @Size(min = 3, max = 8) String name;
@NotNull @Size(min = 3, max = 16) String surname;
@Size(min = 3, max = 10) String company;
// ...
ここでの問題は、オブジェクトを構築できて例外がスローされないことです。例えば。
Person p = new Person("a", "b", "c");
これは実行時の例外をスローせず、違反した制約を持つオブジェクトを作成します。違反した制約を取得するには、Validator
インスタンスをクライアントコードから明示的に呼び出す必要があります。どうしてそういうのか分かりませんが、オブジェクトのフィールドが違反した場合には何らかの例外で失敗するオブジェクトの構築が必要です。そのようなもの:
Person p = new Person("a", "b", "c");
...例外をスローします。そして、無効なオブジェクトを作成できませんでした。これは私が望む行動です。
これは可能ですか?
あなたは私の要件を説明しようとしている単なる基本的な例ですか?実際のオブジェクトには30個のフィールドがあり、ビルダーパターンなどを使用するので、あなたのようなものは不可能です。私が言ったように、私は制約が違反された場合に失敗する工事を必要とします – wesleyy