gpt4 book ai didi

java - 验证日期 - Bean 验证注释 - 具有特定格式

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:31 57 4
gpt4 key购买 nike

我想验证格式为 YYYY-MM-DD_hh:mm:ss

的日期
@Past //validates for a date that is present or past. But what are the formats it accepts

如果那不可能,我想使用@Pattern。但是在 @Pattern 中使用上述格式的 regex 是什么?

最佳答案

@Past仅支持 DateCalendar但不是字符串,因此没有日期格式的概念。

您可以创建自定义约束,例如 @DateFormat它确保给定的字符串遵循给定的日期格式,并具有如下约束实现:

public class DateFormatValidatorForString
implements ConstraintValidator<DateFormat, String> {

private String format;

public void initialize(DateFormat constraintAnnotation) {
format = constraintAnnotation.value();
}

public boolean isValid(
String date,
ConstraintValidatorContext constraintValidatorContext) {

if ( date == null ) {
return true;
}

DateFormat dateFormat = new SimpleDateFormat( format );
dateFormat.setLenient( false );
try {
dateFormat.parse(date);
return true;
}
catch (ParseException e) {
return false;
}
}
}

请注意 SimpleDateFormat实例不能存储在 validator 类的实例变量中,因为它不是线程安全的。或者你可以使用 FastDateFormat来自 commons-lang 项目的类,可以安全地从多个线程并行访问。

如果您想将对字符串的支持添加到 @Past你可以通过实现一个实现 ConstraintValidator<Past, String> 的 validator 来做到这一点并使用 XML 进行注册 constraint mapping .但是,没有办法指定预期的格式。或者,您可以实现另一个自定义约束,例如 @PastWithFormat .

关于java - 验证日期 - Bean 验证注释 - 具有特定格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17539724/

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