Spring MVC表单验证日期字段

use*_*144 5 java spring date spring-mvc

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

<form:input path="date" />
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

Ser*_*sta 1

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

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

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