Spring MVC表单验证日期字段


问题内容

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

<form:input path="date" />

我需要通过以下方式进行验证:

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

  2. 如果用户设置了不可接受的格式,我需要提出一个错误。

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

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

解决这个问题有什么好的办法吗?


问题答案:

如果您将从Spring MVC验证器转到Hibernate,则有一种方法可以做到这一点。没什么大不了的,因为Hibernate验证器可以与Spring
Validator界面很好地配合使用(也可能对支持组的SmartValidator接口很感兴趣)。

之后,您可以
@NotNull
在日期字段上指定注释。

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

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

使用此解决方案,您将在指定的每种情况下收到预期的验证错误消息。