当前位置: 首页 > 面试题库 >

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

庾奇思
2023-03-14
问题内容

我正在尝试 使用&Hibernate验证来验证 String
Date
javax.validation。我需要检查给定的字符串日期应该是过去的日期,并且应该是正确的yyyyMMdd格式,并具有所有限制,例如leap年30th31st日。

 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

将您的模式更改为此:

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<? extends Payload>[] payload() default { };

    String pattern();

}

验证器类

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

public class CheckDateValidator implements ConstraintValidator<CheckDateFormat, String> {

    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;


 类似资料:
  • 问题内容: 我的日期格式为“ yyyy-MM-dd’T’HH:mm:ss.sssZ”。例如,日期为“ 2018-07-17T09:59:51.312Z”。我正在使用下面的代码来解析Java中的String。 这给了我“无法解析的日期:”例外。谁能告诉我该怎么做? 问题答案: 您忘了在 那会做的工作

  • 我使用以下sql将字符串与日期oracle进行比较,但得到的结果不正确。我尝试了to\u date、to\u char选项,但没有得到任何正确的结果。 地点日期1:10-JUN-2101.00.00.000000000 AM日期2:10-JUN-2021 01:00 上述sql返回上述Date1和Date2的行,尽管它们相等。Date1也是varchar格式,Date2是带有本地时区格式的时间戳(

  • 问题内容: 嗨, 我将String转换为Date格式。但是它返回错误的日期。例如, 我想像这样将其转换为“日期”对象,2010年7月5日 怎么做?我尝试过这样 但我收到“无法解析的日期:”。 问题答案: 如果要将日期格式的一种日期字符串转换为另一种格式,则可以使用SimpleDateFormat类的format()和parse()方法 首先,您需要使用设置源模式的parse()方法将字符串解析为日

  • 问题内容: 如何将字符串日期格式转换为日期,我的日期字符串格式为 接下来,我没有运气尝试。 以上所有语句都给出了解析错误。 问题答案: 请阅读的文档time.Parse: 该布局通过显示参考时间(定义为 2006年1月2日星期一15:04:05-0700 如果它是值,将被解释;它用作输入格式的示例。然后将对输入字符串进行相同的解释。 所以正确的格式是

  • 在PHP中,我需要检查一个字符串是否为以下格式: 其中x、y和z是整数。因此,字符串包含3个整数,由2个破折号分隔,规则如下: 验证这一点最简单的方法是什么?

  • 问题内容: 我正在使用它来获取当前时间: 我想将值(我将其打印)放入日期对象中,我尝试了以下方法: 但是eclipse告诉我这个功能不好。 编辑 的是,我打印您使用System.out.println的价值 问题答案: 每当您要将String转换为Date对象时, 请使用尝试使用 。另外的事情是,如果您想将转换为,则应该使用函数。 现在已不建议使用Point for you,现在 不建议使用。现在