Как включить javax аннотации, когда значение не равно null и отключено, когда значение равно null?


Мне нужно отключить проверку, если значение электронной почты равно null, и проверить его, если значение не равно null.

@Email(message = "{invalidMail}")
private String email;
2   2   2018-07-16 12:58:41

2 ответа:

Вы не можете достичь этого результата только с помощью предопределенного набора аннотаций проверки.

Вы должны создать пользовательскую аннотацию проверки, которая выполняет проверку на основе спецификаций. Вы можете получить вдохновение от статьи Baeldung Spring MVC Custom Validation .

Вот аннотация.

@Documented
@Constraint(validatedBy = MyEmailValidator.class)     // Class which performsthe validation
@Target({ ElementType.FIELD })                        // Applicable to a field
@Retention(RetentionPolicy.RUNTIME)
public @interface MyEmail {
    String message() default "The email is invalid";  // The default message
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

И класс, который фактически выполняет проверку самого по отношению к регулярному выражению электронной почты, если входное значение не равно null. Возвращает true в противном случае как null принято. Примечание. этот класс должен реализовать ConstraintValidator<A extends Annotation, T>.

public class MyEmailValidatorimplements ConstraintValidator<MyEmail, String> {

    // Email Regex
    private final String emailPattern= "[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}";

    @Override
    public void initialize(MyEmail myEmail) { }

    @Override
    public boolean isValid(String input, ConstraintValidatorContext cxt) {
        if (input == null) {
            return true; 
        } else return Pattern.matches(emailPattern, input);
    }
}

Я нашел ответ, и он заключается в том, что почти все аннотации проверки java принимают значение null, поэтому, если мое значение равно null, оно будет принимать его, иначе оно будет проверять.