当前位置:  开发笔记 > 编程语言 > 正文

使用Hibernate API进行Java字符串日期验证

如何解决《使用HibernateAPI进行Java字符串日期验证》经验,为你挑选了1个好方法。

我正在尝试 使用&Hibernate验证来验证字符串日期javax.validation.我需要检查给定的字符串日期应该是过去的,它应该是正确的yyyyMMdd格式与所有约束,如闰年30th,31st日.

 public class UserInformation {

        @NotNull 
        public String idNum = null;

        @NotNull
        //@Past
        @Pattern(regexp="\\d{4}(1[012]|0[1-9])(3[01]|[12]\\d|0[0-9])")
        public String dob= null;

    }

我尝试使用此代码但无法正常工作.有什么解决方案吗?如果我们有自定义验证器,那么它是在字段级别.请给出建议或代码片段.



1> Rafael Teles..:

选项1

将您的模式更改为:

Pattern(regexp = "([0-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}")

但请记住,这种验证不会检查2月是否少于28/29天,以及其他日期限制.

选项2

创建自定义约束验证器

注解

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = CheckDateValidator.class)
@Documented
public @interface CheckDateFormat {

    String message() default "{message.key}";

    Class[] groups() default { };

    Class[] payload() default { };

    String pattern();

}

验证器类

拥有Date对象,您可以进行任何其他验证(例如过去的拒绝日期)

public class CheckDateValidator implements ConstraintValidator {

    private String pattern;

    @Override
    public void initialize(CheckDateFormat constraintAnnotation) {
        this.pattern = constraintAnnotation.pattern();
    }

    @Override
    public boolean isValid(String object, ConstraintValidatorContext constraintContext) {
        if ( object == null ) {
            return true;
        }

        try {
            Date date = new SimpleDateFormat(pattern).parse(object);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

使用

@CheckDateFormat(pattern = "ddMMyyyy")
private String value;

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有