使用JSR303对Spring MVC Date格式进行验证



我使用Spring MVC和JSR303来进行输入验证。

我创建的一个表单有两个日期字段,它们绑定到支持该表单的对象中的Date对象。我使用JSR303使用@FutureDate进行验证。我也在使用@DateTimeFormat(pattern="dd/MM/yyyy")(我知道这不是验证)。

如何验证表单上String的日期格式?如果我将其他必填字段留空(@NotEmpty),并以"dd/MM/yy"的形式输入无效日期,则在重新显示时会将其转换为"dd/MM/yyyy"(例如,12/03/12重新显示为12/03/0012)。这意味着我会在我的系统中得到错误的数据。如果我输入"aaa",我会得到一个转换异常。格式正确的String将转换为Date对象。

此外,Date字段的"必需字段"注释应为@NotNull还是@NotEmpty

非常感谢您提供的任何建议。

谢谢拉尔夫。我做了一些进一步的挖掘,得出了这个(在我的表单控制器中):

    @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:一些很好的平静的安慰信息,以帮助所有疏忽的用户

也许还有其他方法可以做到这一点,但现在就可以了。

使用JSR303不能做到这一点,因为验证运行在已经流行的(表单baching)对象上。

因此,您需要实现自己的自定义转换器,这比spring附带的转换器更严格。

@参见弹簧参考:第6.5章弹簧3类型转换

最新更新