我正在使用带有JSR303的Spring MVC进行输入验证。
我创建的表单有几个日期字段绑定到支持表单的对象中的Date
个对象。我正在使用JSR303使用Date
对@Future
进行验证。我也在使用@DateTimeFormat(pattern="dd/MM/yyyy")
,(我知道它不是验证)。
如何验证表单上String
的日期格式?如果我将其他必填字段留空(@NotEmpty
)并输入“dd / MM / yy”形式的无效日期,则会在重新呈现时转换为“dd / MM / yyyy”(例如12 / 03/12重新呈现为12/03/0012)。这意味着我将在我的系统中获取duff数据。如果我输入“aaa”,我会得到转换异常。格式正确的String
将转换为Date
个对象。
此外,Date
字段的“必填字段”注释应为@NotNull
还是@NotEmpty
?
非常感谢您提供的任何建议。
答案 0 :(得分:2)
谢谢拉尔夫。我做了一些进一步的挖掘并想出了这个(在我的表单控制器中):
@InitBinder
public void initBinder(WebDataBinder binder) {
String format = "dd/MM/yyyy";
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
dateFormat.setLenient(false);
CustomDateEditor customDateEditor = new CustomDateEditor(dateFormat,true,format.length());
binder.registerCustomEditor(Date.class, customDateEditor);
}
属性文件具有以下键:
typeMismatch.java.util.Date
:一些很好的平静令人放心的信息,可以帮助所有疏忽的用户
也许有其他一些方法可以做到这一点,但现在这样做。
答案 1 :(得分:1)
您无法使用JSR303执行此操作,因为验证在已经流行的(表单缓存)对象上运行。
所以你需要实现自己的自定义转换器,这比弹簧附带的转换器要严格得多。