2016-05-09 2 views
2

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

error 500

исключение было, как excpected, но вместо показав ошибку 500, я хотел бы увидеть сообщение об ошибке, объясняющее, что случилось. Итак, я считаю, что для определения пользовательских сообщений об ошибках я должен использовать ConstraintValidatorContext. Но я не знаю, как это сделать. Любые идеи, пожалуйста?

+0

И ваша проблема? Существует исключение, поскольку оно недействительно, как и следовало ожидать, поэтому я не вижу проблемы, которая у вас есть. Одно дело, что у вас есть много ведущих пробелов в значении 'message' в вашей аннотации. –

+0

Да, исключение было таким же, как и предполагалось, но вместо того, чтобы показывать ошибку 500, я хотел бы увидеть сообщение об ошибке, объясняющее, что случилось. и это не позволяет пользователю нажимать кнопку «Отправить» до тех пор, пока он не войдет в хорошо сформированный адрес электронной почты. – Najoua

+0

Проверка выполняется на сервере, а не на клиенте, поэтому вам нужно нажать кнопку «Отправить», чтобы запустить проверку. –

ответ

0

Вы должны использовать @ControllerAdvice и обрабатывать исключения для проверки там, например, с @ExceptionHandler(MethodArgumentNotValidException.class).

Смежные вопросы