Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSR303-javax.validation-验证日期_Java_Validation_Date - Fatal编程技术网

JSR303-javax.validation-验证日期

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传输(我必须使用文本字段

我有一个JavaEE应用程序,我想验证一个日期。 我使用字符串执行以下操作:

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字符串的转义字符,在它进入正则表达式引擎之前。