Я хочу создать собственный валидатор электронной почты, используя аннотации. 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
Проверка выполняется на сервере, а не на клиенте, поэтому вам нужно нажать кнопку «Отправить», чтобы запустить проверку. –