注釈を使用してカスタム電子メールバリデータを作成したいと思います。ここThis solution was useful while creating the validator. は注釈です:カスタムエラーメッセージを定義するConstraintValidatorContext
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {CommonsEmailValidator.class})
@Documented
@ReportAsSingleViolation
public @interface ExEmailValidator {
String message() default " {org.hibernate.validator.constraints.Email.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface List {
ExEmailValidator[] value();
}
}
そして、ここでクラスCommonsEmailValidatorです:
public class CommonsEmailValidator implements ConstraintValidator<ExEmailValidator, String> {
private static final boolean ALLOW_LOCAL = false;
private EmailValidator realValidator = EmailValidator.getInstance(ALLOW_LOCAL);
@Override
public void initialize(ExEmailValidator email) {
// TODO Auto-generated method stub
}
@Override
public boolean isValid(String email, ConstraintValidatorContext constraintValidatorContext) {
if(email == null) return true;
return realValidator.isValid(email);
}
}
私は電子メール形式はI有効ではありませんが、登録フォームに提出クリックしたときに、私は、プロジェクトを実行しますが、次の例外があります。
要求処理に失敗しました。ネストされた例外はjavax.validation.ConstraintViolationExceptionです:検証はクラスに失敗しました[...]グループ[javax.validation.groups.Default、]
例外がexcpected、しかし、その代わりにされたように時間を持続中に500エラーを表示すると、何が問題なのかを説明するエラーメッセージが表示されます。 私はConstraintValidatorContextを使用してカスタムエラーメッセージを定義する必要があると思います。しかし、私はそれを行う方法を知らない。 アイデアをお願いしますか?
あなたの問題は?あなたが予期していたように、それが無効であるために例外があります。あなたが持っている問題は表示されません。ひとつは、アノテーションの 'message'値に多くの先行スペースがあることです。 –
はい、例外は察知されましたが、500エラーを表示する代わりに、何が間違っているかを説明するエラーメッセージが表示されます。ユーザーは整形式のメールを入力するまでサブミットをクリックできません – Najoua
検証はサーバーではなくクライアントで行われるため、検証をトリガーするにはsubmitを押す必要があります。 –