如何在值不为null时启用javax注释,在值为null时禁用?
如果email的值为null,我需要禁用验证,如果值不为null,则检查验证如何在值不为null时启用javax注释,在值为null时禁用?,java,spring,validation,spring-boot,annotations,Java,Spring,Validation,Spring Boot,Annotations,如果email的值为null,我需要禁用验证,如果值不为null,则检查验证 @Email(message = "{invalidMail}") private String email; 仅使用预定义的验证注释集无法实现此结果 您必须创建一个自定义验证注释,该注释根据规范执行验证。你可以从贝尔东的文章中得到启发 这是注释 @Documented @Constraint(validatedBy = MyEmailValidator.class) // Class which perfo
@Email(message = "{invalidMail}")
private String email;
仅使用预定义的验证注释集无法实现此结果 您必须创建一个自定义验证注释,该注释根据规范执行验证。你可以从贝尔东的文章中得到启发 这是注释
@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 {};
}
@已记录
@约束(validatedBy=MyEmailValidator.class)//执行验证的类
@目标({ElementType.FIELD})//适用于字段
@保留(RetentionPolicy.RUNTIME)
public@interface-MyEmail{
String message()默认“电子邮件无效”;//默认消息
类[]组()默认值{};
类我找到了答案,几乎所有java验证注释都接受null,因此如果我的值为null,它将接受它,否则它将进行检查。hibernateEmailValidator将忽略null
和空值,因此基本上它已经做了您想要的事情。默认的hibernate验证EmailValidateator
已经忽略了null
和空值,为什么要重新发明轮子?这将解决问题,这就是我在提交问题之前所做的,但这个解决方案不是动态的,例如@Min
或@Max
或任何验证注释。即使您将regex设置为一个参数,您也可以将所有验证注释与验证放在一起。
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);
}
}