gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:32:08 25 4
gpt4 key购买 nike

我正在尝试验证 字符串日期 使用 javax.validation & hibernate 验证。我需要检查给定的字符串日期应该是过去的并且应该是正确的 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;

}

我尝试使用此代码但不起作用。有什么解决办法。如果我们有自定义 validator ,那么它是否在字段级别。请给出建议或代码片段。

最佳答案

选项1

将您的模式更改为:

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

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

选项 2

创建您的自定义约束 validator

Annotation


@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();

}

Validator class



拥有 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;
}
}
}

Use


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

关于使用 Hibernate API 的 Java 字符串日期验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41718208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com