【问题标题】:Spring MVC Date format validation with JSR303使用 JSR303 验证 Spring MVC 日期格式
【发布时间】:2012-02-19 20:24:32
【问题描述】:

我正在使用带有 JSR303 的 Spring MVC 进行输入验证。

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

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

Date 字段的“必填字段”注释还应该是@NotNull 还是@NotEmpty

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 是否可以将消息密钥从 typeMismatch.java.util.Date 更改为更具体的内容,例如 CommandObjectXYZ.dateXYZ=Date is not valid
    【解决方案2】:

    您不能使用 JSR303 执行此操作,因为验证在已填充的(表单绑定)对象上运行。

    所以你需要实现自己的自定义转换器,这比 spring 附带的更严格。

    @见Spring Reference: Chapter 6.5 Spring 3 Type Conversion

    【讨论】:

      猜你喜欢
      • 2013-05-20
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      相关资源
      最近更新 更多