java - Spring MVC 表单验证日期字段

标签 java spring date spring-mvc

我有一个表单域应该被转换成一个 Date 对象,如下所示:

<form:input path="date" />

并且我要求通过以下方式进行验证:

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

  2. 如果用户输入的格式 Not Acceptable ,我需要报错。

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

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

有什么好的解决办法吗?

最佳答案

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

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

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

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

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

关于java - Spring MVC 表单验证日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24053139/

相关文章:

java - 我可以使用 native 编译作为 Java 混淆吗

java - "Type mismatch: cannot convert from Boolean to boolean"

java - Spring RestTemplate,在解析为 Json 之前拦截响应

java - jar 外部的 Spring Boot 外部属性

java - 在Java中转换日期时出现异常

java - 并发问题在 Google Maps Widget 上绘制 google maps GeoCoder 请求

java - 为什么打印出两位数字而不是一位?

java - @ControllerAdvice 方法似乎绕过了拦截器

objective-c - 如何计算两个日期之间的差异?

java - 如何在 Java 中设置尊重用户操作系统设置的日期和时间格式