1

jsr303 を使用してユーザー入力を検証しています。クラスのすべてのプロパティにデフォルトで注釈を付ける方法があるかどうか疑問に思っていました。

例えば

public String getName();

public String getAddress();

public String getEmployerName();

public String getEmployerAddress();

それらすべてに @NotNull/@NotBlank という注釈を付ける代わりに、文字列を返すすべてのプロパティに対してデフォルトでこの検証チェックを設定できる方法を探していました。私がこのようなものを探している唯一の理由は、この注釈を任意のプロパティに付けることを忘れて、バグを開くのが簡単だと思うからです。

ご回答いただければ幸いです。

4

1 に答える 1

1

このためのすぐに使用できるソリューションについては知りませんが、この目的のためにプログラムによる制約宣言に Hibernate Validator の API を使用できます。

  • リフレクションを使用して String 型のすべてのフィールド/ゲッターを決定する
  • これらのフィールド/ゲッターごとに、API を介して必要な制約を追加します

たとえば、フィールドの場合は次のようになります。

List<Field> stringFields = ...;

HibernateValidatorConfiguration configuration = Validation
        .byProvider( HibernateValidator.class )
        .configure();

ConstraintMapping constraintMapping = configuration.createConstraintMapping();

for(Field field : stringFields) {
    constraintMapping
        .type( MyBean.class )
        .property( field.getName(), FIELD )
            .constraint( new NotNullDef() )
            .constraint( new NotBlankDef() );
}

Validator validator = configuration.addMapping( constraintMapping )
        .buildValidatorFactory()
        .getValidator();     
于 2013-05-10T21:24:00.510 に答える