Spring MVC表单validation日期字段

我有一个表单字段应转换为Date对象,如下所示:

我要求通过以下方式进行validation:

  1. 如果用户将此字段留空。 我需要设置一些默认日期。

  2. 如果用户以不可接受的格式投入,我需要提出错误。

问题是我可以满足第一或第二要求。

  1. 我可以注册PropertyEditor ,如果日期不可接受,请设置null,如果此字段为null,则设置一些默认日期。 但是使用这种方法我无法满足第二个要求,因为如果我将其转换为null,我将无法向用户注册第二个错误。
  2. 我可以设置@DateTimeFormat(pattern =“dd-MMM-yyyy”)注释并提供相应的typeMismatch错误,但是当用户在此字段中留下空值时,它仍会返回此错误。

这个问题有什么好的解决方案吗?

如果你从Spring MVCvalidation器转移到Hibernate,有一种方法可以做到这一点。 这不是什么大问题,因为Hibernatevalidation器可以很好地与Spring Validator接口配合使用(您也可能对支持组的SmartValidator intreface感兴趣)。

之后你可以指定
@NotNull
日期字段上的注释。

在属性文件中只需添加
NotNull.[formName].[dateField] =如果没有发送日期,则会显示此消息typeMismatch.[formName].[dateField] =如果spring无法将输入转换为日期对象,则会显示此消息(格式validation错误)

对于格式检查,您可以使用CustomDateEditor

使用此解决方案,您将在指定的每种情况下获得预期的validation错误消息。

当我不得不面对这样的问题时,我会颠倒逻辑。 我没有为空字段设置默认值,但我在操作的渲染部分中使用默认值预加载字段。 所以我可以安全地使用@DateTimeFormat(pattern="dd-MMM-yyyy")来生效,因为空字段假设用户专有地删除了默认值,这是一个错误。

所以恕我直言,您应该在控制器的GET部分为该表单设置默认值,并坚持使用简单的@DateTimeFormat(pattern="dd-MMM-yyyy")注释。

我有一个使用包含日期字段的@ModelAttribute注释对象的应用程序。 在对象类中,日期字段在getter和setter上使用DateTimeFormat(pattern="dd/MM/yyyy")注释。 Spring(3.2.4)接受date字段的空值,只是将其设置为null。 所以你应该使用@DateTimeFormat(pattern="dd-MMM-yyyy")并且仍然能够接受空值。