JSR303-javax.validation-验证日期
我有一个JavaEE应用程序,我想验证一个日期。 我使用字符串执行以下操作:JSR303-javax.validation-验证日期,java,validation,date,Java,Validation,Date,我有一个JavaEE应用程序,我想验证一个日期。 我使用字符串执行以下操作: import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; ... @NotNull @Size(min = 1, max = 255) private String myString; 但现在我有两个日期要确认。在前端系统中,用户可以在文本字段中写入字符串,该字符串将通过JSON传输(我必须使用文本字段
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”进行验证。如何做到这一点
我不这么认为,但是否有自动验证来检查开始日期是否早于结束日期?我只找到了@未来
和@过去
所以唯一的解决办法就是使用@模式,正则表达式
提前感谢您的帮助,致以最诚挚的问候。@DateTimeFormat在web数据绑定期间,在将请求参数映射到对象上时使用(假设您已使用
或手动启用)。通常在将JSON反序列化为对象时不会使用。您如何阅读JSON?你用什么来反序列化它?您不能在格式化之后验证java日期对象,您必须在反序列化之前预先检查
没有内置多字段约束。如果要比较对象上的两个属性,您需要编写自己的类型级别约束。两件事:
@DateTimeFormat
不是JSR-303的一部分,mm
代表分钟,而不是月。另外,将“dd.MM.yy”
更改为“dd.MM.yyyy”
如何失败?因为您似乎正在使用SpringMVC(此注释就是其中的一部分),所以您可能需要修改/重新标记您的问题。至少,JSR 303没有为此提供注释。是的,我可以更改为dd.MM.yyyy
,但没有验证。我也无法理解模式验证在日期
而不是字符串
上是如何有用的,因为日期
不存储任何关于其内部格式的信息。无论如何,我不做Spring,但我认为您只需要实现一个。如果是JSF,至少我会这样做。验证JSON表示中的日期格式是JSON解析器/映射器的责任。首先,@Pattern
只适用于字符串
(如javadoc中所述)。其次,反斜杠是字符串中的转义字符。你需要用另一个来表示一个真实的,谢谢你的回复。我想用@Pattern(regexp=“\t(0[1-9]|[12][0-9]|[3[01])[-/.](0[1-9]| 1[012])[-/.](19[124; 20)\d\t”)
验证它,但有一个错误,它是一个无效的转义序列。是的,我可以在发送到后端系统之前检查它,但我没有访问前端系统的权限,我只是“后端主机”,我必须检查日期格式是否正确,因此第一步中的模式就足够了。在java正则表达式中,您必须加倍所有\\,因为\已经是java字符串的转义字符,在它进入正则表达式引擎之前。