java - JSR 303 - javax.validation - 验证日期

标签 java validation date

我有一个 Java EE 应用程序,我想验证一个日期。 使用 String 我这样做:

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 在 Web 数据绑定(bind)期间使用,当将请求参数映射到对象时(假设您已使用 <mvc:annotation-driven/> 或手动启用它。)将 JSON 反序列化为对象时通常不会使用它。你是如何阅读你的 JSON 的?你用什么反序列化它?您无法在格式化之后验证 java Date 对象,您必须在反序列化之前预先检查。

没有内置的多字段约束。如果您想比较一个对象的两个属性,您需要编写自己的类型级别约束。

关于java - JSR 303 - javax.validation - 验证日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4694863/

相关文章:

java - 如何将 0000 年(可能)为零的时间传输到 java.util.Date

java - 访问实现接口(interface)的函数的 getter 和 setter

Java/Scala 有界泛型和类型推断不匹配

java - 为什么在 Java 中使用堆内存

.net - 那么 [Email] 属性是否内置于 ASP.NET MVC 3 中?

asp.net-mvc - 在ASP.NET MVC框架中验证发布的表单数据

java - Jackon 自定义解串器从未调用过

java - Spring查询字符串简单验证?

mysql - 使用mysql选择所有以前的日期并选择6个月内的所有日期

javascript一月日期问题