問題タブ [bean-validation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
3198 参照

java - jaxb と jsr303

jaxb を使用して構成からオブジェクトを構築しています。今まで検証用のカスタム関数を書いていましたが、アノテーションに移りたいと思います。

例えば:

この上記のアプローチの例外は説明的で、xml 内のエラーの位置を教えてくれました。

私はこれに移動したい:

afterMarshal で注釈を読み取り、プロパティ注釈に従って検証関数を実行することでこれを確認できますが、エラーが発生した実際の場所 (xml 内) を失います。

この問題に対して別のアプローチ/フレームワークを使用する必要がありますか?

編集:明確にするために、私が書いている構成エディターのプロパティ制約メタデータが必要なため、注釈アプローチを使用する必要があります

0 投票する
1 に答える
8744 参照

java - Beanの検証をチェック、スロー、およびキャッチする方法ConstraintViolationException

次の場合を考えてみましょう。

  • というクラスを持つ「サービス」モジュールがありますClientService

  • これは、「dao」モジュールでClientService呼び出されるクラスを使用します。ClientDao

  • ClientDaoメソッドがありinsert(@Valid Client c)ます。このメソッドはをスローしDaoExceptionます。

  • クライアントは私の実体です。彼の属性には、のようなjavaxBean検証が付けられています@javax.validation.constraints.NotNull

いくつかの制約に違反した場合、ClientServiceを受け取りますConstraintViolationException。ただし、「dao」モジュールのその他の例外ClientServiceのみを期待します。DaoExceptionそして、私はそれを維持したいと思います。オブジェクトが実行するタスクに直接関連する例外のみをスローし、上位層(この場合は「サービス」モジュール)の実装の詳細を非表示にします。

私がやりたいのは、私の「dao」モジュールのjavax.validation.ConstraintViolationExceptionaにカプセル化し、それを.とともに句で宣言することです。そして、自分で検証チェックを実行したくない(そのため、アノテーションを使用します)ValidationExceptiontrowsDaoException@Valid

ここにコードがあります(単純にするために、インターフェイス、インジェクション、その他すべてを抽象化します)

daoクラスを次のようなものに変更したいと思います。

しかし、私が説明した方法でこれを行う方法がわかりません。

FTR、このプロジェクトではSpringWebFlowとHibernateを使用しています。daoモジュールには@Repositoryクラスが含まれ、サービスモジュールには@Serviceクラスが含まれます。

0 投票する
4 に答える
10589 参照

java - SpringでJSR-303アノテーションを使用するには、どのような設定を行う必要がありますか?

Spring 3をダウンロードしてクラスパスに配置しましたが、@Validアノテーションをインポートできません。ただし、他のSpring 3アノテーション(@Controllerなど)をインポートすることはできます。@ValidのJarとパッケージは何ですか?

編集:これはJSR-303アノテーションです。それはどういう意味ですか、どうすれば入手できますか?

0 投票する
1 に答える
729 参照

java - javax.validation get フィールド フィールド所有者オブジェクト

現在の状況を想像してください:

@BiggerThanこのアノテーションのカスタム制約バリデーターを書きたいと思います。ただし、実装でAlphaインスタンスを取得する方法はないようです。ConstraintValidatorisValid メソッドのシグネチャは

「オブジェクト所有者」パラメーターはありません。どちらかを通過する方法はないようですcontext

javax.validator フレームワークでこれを実装することはまったく可能ですか?

私は hibernate-validator を実装として使用していますが、それを変更しても構いません。必要に応じて、特定の jsr303 実装に関連付けられたハッキン​​グされたソリューションを検討します。

0 投票する
2 に答える
1996 参照

java - JSR303 検証 - カスタム クラス バリデータからのグループの使用

次のようなフィールドを含むかなり貧弱に構築された Bean があるユースケースがあります。

フラグ [1|2] が true の場合にのみ、電話/住所/都市/州 [1|2] を検証する必要があります。悪い、悪いデザイン、当然です。

私たちの現在の戦略は、「実際の」データフィールドのそれぞれに @NotNull (または必要な検証) を使用し、次のようにグループ インジケーターを使用することです。

この Bean を検証するビジネス ロジック (「デフォルト」検証グループによって検証される他のさまざまなフィールドが含まれる) では、「デフォルト」グループの違反を取得し、flag1 が true かどうかを確認します。そのため、Info.First.class の検証を実行し、flag2 が true かどうかを確認してから、Info.Second.class の検証を実行します。

ここで質問です...カスタムクラスバリデーターからこれらのグループにフックする方法はありますか? flag1/flag2 プロパティとそれに対応するカスタム グループを取得するクラス バリデータを用意し、isValid が呼び出されると、グループに対してこれらの 2 次/3 次呼び出しを行うことを想定しています。目的は単純に、カスタム クラス バリデーターをデフォルト グループに入れることです。そのため、このクラスを検証するビジネス ロジックは、検証を個別に呼び出さなければならないため、この醜いレガシー デザインの詳細が内部に漏れることはありません。

考え?ありがとう!

0 投票する
1 に答える
945 参照

java - AOP アドバイスを ConstraintValidator に適用する方法春に?

ValidatorSpring 3.0.x で (JSR-303 仕様に従って)自分で作成しようとしています。

isValid(Serializable, CosntraintValidatorContext)メソッドに で注釈を付けました@Transactionalが、トランザクションに関するアドバイスがこのメソッドに適用されていないようです。isValid()メソッドが呼び出されると、 への呼び出しsessionFactory.getCurrentSession()によって例外が作成されます。

org.hibernate.HibernateException: スレッドにバインドされた Hibernate セッションがありません。構成では、ここで非トランザクション セッションを作成することはできません

問題なく注入される同じ Bean があります@Autowired sessionFactoryValidator私の現在の回避策はopenSession()の代わりにを使用することですgetCurrentSession()が、それには手動のトランザクション管理が含まれますが、これは避けたいと思います。

バリデーター Bean のコンストラクターでスタック トレースを実行するValidatorと、o.s.b.f.s.AbstractAutowireCapableBeanFactory.createBean(). これは、ファクトリが@Autowiredmy のフィールドにデータを入力できることを意味すると思いますValidatorが、トランザクションに関するアドバイスを適用していないように見えますか?

この件についてご協力いただきありがとうございます。

編集:それが助けになる場合はcreate new Exception()、コンストラクターに記録される部分的なスタックトレース(を介して)を含めました:

トランザクション構成は正しいように見えます (STS IDE は、メソッドが(バリデーター自体に注釈を付けて)isValid()トランザクション マネージャーによって適切にアドバイスされていることを報告します)。 Spring コンテナーの場合、データ バインディング中に検証が行われると、アドバイスが適切に適用されません。org.springframework.transaction.interceptor.TransactionInterceptor.invoke@Component

0 投票する
2 に答える
19020 参照

java - javax 検証エラー メッセージをより具体的にする

この質問が以前にどこかで取り上げられていたら申し訳ありません。もしそうなら、私をリンクしてください、私はまだ満足のいく答えを見つけることができませんでした.

私は、javax 検証によって提供されるエラー メッセージをより具体的にする方法を見つけようと探し回っています。

@Min アノテーションに対して現在持っているメッセージは、ValidationMessages.properties ファイルで指定されています。

これは期待どおりに出力されます

私が望むのは、メッセージに、検証に失敗した変数 (およびクラス) の名前と、失敗した変数の値も含まれていることです。もっと好きです。

どんな助けでも大歓迎です。

クレー

0 投票する
2 に答える
474 参照

java - 休止状態バリデーターですべてのプロパティにデフォルトの制約を設定するにはどうすればよいですか

@Validすべてのプロパティに自動的に制約を設定したいと考えています。

例:

@Validすべてのプロパティに注釈があると Validator に認識させたい。

これはどのように達成できますか?

0 投票する
2 に答える
156 参照

java - @Validが失敗すると、自動的に入力フォームに戻ります

コントローラに次のメソッドがあります。

これらのメソッドの多くには、繰り返しコードブロックがあるようです。

検証エラーが発生した場合に、このブロックを挿入して、POSTリクエストの送信元に自動的にリダイレクトする必要を回避する方法はありますか?