Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在值不为null时启用javax注释,在值为null时禁用?_Java_Spring_Validation_Spring Boot_Annotations - Fatal编程技术网

如何在值不为null时启用javax注释,在值为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的值为null,我需要禁用验证,如果值不为null,则检查验证

@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,它将接受它,否则它将进行检查。

hibernate
EmailValidator将忽略
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);
    }
}