我有一个表单域应该被转换成一个 Date 对象,如下所示:
<form:input path="date" />
并且我要求通过以下方式进行验证:
如果用户将此字段留空。我需要设置一些默认日期。
如果用户输入的格式 Not Acceptable ,我需要报错。
问题是我可以满足第一个或第二个要求。
- 我可以注册 PropertyEditor,如果日期 Not Acceptable ,则设置为空,如果此字段为空,则设置一些默认日期。但是使用这种方法我无法满足第二个要求,因为如果我将其转换为 null,我将无法向用户注册第二个错误。
- 我可以设置 @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/