カスタム制約を記述する場合、複数の注釈を1つのバリデータ実装で検証することができます。例えば、私は異なる@sizeアノテーションを規定するいくつかのアノテーションを持っていますが、それらのすべてが同じバリデータークラスを指し示すようにして、いくつかのグローバルチェックを行います。つまり、すべてが特定の正規表現に一致する必要があります。私が見る限りでは、実装は1つの注釈タイプを取ります。JSR-303 Bean検証 - カスタム制約1つの検証ツールに対する複数の注釈
一つ注釈
@Target({ METHOD, FIELD, ANNOTATION_TYPE, TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {UCNValidator.class})
@Documented
@Size(min = 9, max = 9, message = "{exactlength}")
public @interface UCN {
String message() default "{invalidFormat}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String fieldName() default "ucn";
}
バリ
public class UCNValidator implements ConstraintValidator<UCN, String>
{
private String pattern = "[a-zA-Z].*";
private String fieldName;
@Override
public void initialize(UCN constraintAnnotation)
{
this.fieldName = constraintAnnotation.fieldName();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext)
{
if (value != null)
{
if (!value.matches(pattern))
{
//do some stuff
return false;
}
}
return true;
}
これは、いずれの場合でも、最善の方法ではないと判断しました。共通の検証機能のために、私はすべてのバリデーターが使用する共通のメソッドを書くことができます。 – andyfinch