使用JSR303进行Spring MVC日期格式验证

时间:2012-02-19 20:24:32

标签: java date spring-mvc format bean-validation

我正在使用带有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

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

2 个答案:

答案 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执行此操作,因为验证在已经流行的(表单缓存)对象上运行。

所以你需要实现自己的自定义转换器,这比弹簧附带的转换器要严格得多。

@See Spring Reference: Chapter 6.5 Spring 3 Type Conversion