6

JSR 303仕様に関する多くのチュートリアルを読みましたが、実稼働の準備ができている例はありません。Set<Constraintviolation<T>>どこでもオブジェクトを取得する方法を説明しました。

例:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
Set<ConstraintViolation<Car>> violations = validator.validate(car);

しかし、次は何ですか?メソッドの呼び出し元(クライアント)に、メソッドパラメーターが不整合な状態にあることを通知したいと思います。

私は何をしなければなりませんSet<ConstraintViolation<Car>>か?手動で繰り返し Set<ConstraintViolation>、すべてのエラーメッセージを1つの文字列に収集してから、このメッセージで例外をスローする必要がありますか?

または、箱から出してすぐに使えるもっと便利な方法がいくつかありますか?

または、validate各Bean内にメソッドを提供する方がよいでしょうか。

4

2 に答える 2

1

また、BeanValidationの使用方法によっても異なります。説明しているユースケースは、BeanValidationAPIを自分で直接使用する場合です。この場合、validate呼び出しの結果としてSet>を取得します。どのように対処するかはあなた次第です。ただし、多くのテクノロジーはBean Validationを統合しており、多くの場合、BeanValidationAPIへのすべての直接呼び出しを非表示にします。たとえば、JPA。JPAを使用し、Bean Validationがクラスパス上にある場合、エンティティはライフサイクルイベント(pre-persist / update / delete)およびjavax.validation.ConstraintViolationExceptionで自動的に検証されます。検証エラーの場合にスローされます。JSFと同様に、Bean Validationを使用したフォーム要素の検証が自動的に行われ、エラーを強調表示することもできます。したがって、プレーンなBean Validation APIを使用する場合を除いて、選択したテクノロジーがJSR303とどのように統合されるかについての例を探す必要があります。

于 2013-01-29T10:49:54.640 に答える
1

私はあなたの最初の提案に行きます-制約違反を繰り返します。これらすべてを含むエラーメッセージを必ずしも作成する必要はありません。bean <bean> is not validエラーメッセージを表示して、制約違反を例外のプロパティとして設定することをお勧めします。

制約違反を別のオブジェクトに変換する必要があるかもしれません。そうしないと、アプリケーションの多くがBeanValidationAPIに依存するようになるためです。それは強すぎる結合かもしれません。

あなたの問題は、制約違反をどうするかが非常にユースケース固有であるということです。制約違反について発信者に通知したくない場合が多くありますが、他のオブジェクトがあります。たとえば、Webフォームで、これらの制約違反も表示する必要があることをビューモデルに通知したいとします。例外をスローすることは別のことです。これはConstraintViolationExceptionほとんどの場合ではなく、アプリケーション固有の例外であることに注意してください。

于 2013-01-28T12:52:32.453 に答える