【发布时间】:2011-06-09 08:30:09
【问题描述】:
我有一个 Java EE 应用程序,我想验证一个日期。 使用字符串我这样做:
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
...
@NotNull
@Size(min = 1, max = 255)
private String myString;
但现在我有两个日期要验证。用户可以在前端系统中在文本字段中写入一个字符串,该文本字段将通过 JSON 传输(我必须使用文本字段,我不能使用日期选择器)。
所以我的后端在我的域类中确实有这个:
@DateTimeFormat(pattern = "dd.MM.yy")
@Temporal(value=TemporalType.TIMESTAMP)
private Date myStartDate;
@DateTimeFormat(pattern = "dd.MM.yy")
@Temporal(value=TemporalType.TIMESTAMP)
private Date myEndDate;
我想根据“dd.MM.yyyy”格式进行验证。如何做到这一点?
而且,我不这么认为,但是否有自动验证来检查开始日期是否早于结束日期?我只找到了@Future 和@Past。
所以唯一的解决方案是使用@Pattern,一个正则表达式?!
提前感谢您的帮助,最好的问候。
【问题讨论】:
-
两件事:
@DateTimeFormat不是 JSR-303 的一部分,mm代表分钟,而不是几个月。还有如何将"dd.MM.yy"更改为"dd.MM.yyyy"失败?由于您似乎正在使用 Spring MVC(此注释是其中的一部分),您可能需要修改/重新标记您的问题。至少,JSR 303 不为此提供 any 注释。 -
可以,我可以改成
dd.MM.yyyy,但是没有验证。 -
我也无法理解模式验证在
Date而不是String上有何用处,因为Date不存储有关其内部格式的任何信息。无论如何,我不做Spring,但我认为你只需要实现一个Validator。如果是 JSF,至少我会这样做。 -
验证 JSON 表示中的日期格式是您的 JSON 解析器/映射器的责任。您需要重新表述您的问题并描述用于解析 JSON 的技术。
-
首先,
@Pattern仅适用于String(如其 javadoc 中所述)。其次,反斜杠是String中的转义字符。你需要用另一个转义它来代表一个实际的。
标签: java validation date