如何在非必填字段上使用@Pattern JSR 303

如何在非必填表单字段上使用约束?@Pattern

@Pattern(regexp="...")
private String something;

一旦我提交我的表单,我就会收到预期的验证错误,但用户可以将该字段留空,因为这不是必填字段。

PS:我可以编写自己的约束注释。但是,我只是要求一种更简单的组合注释或添加注释属性的方法。JSR303 实现是休眠验证器。


答案 1

只需将其设置为空字符串而不是空字符串即可。由于空 HTML 输入字段默认作为空字符串作为 HTTP 请求参数提交,因此您需要让 MVC 框架将空提交的值解释为 。这是在JSF中很容易完成的,由一个在.但是,由于您正在使用Spring MVC而我不这样做,因此我在这里搜索了一下,并找到了这个可能有用的答案nullnull<context-param>web.xml


答案 2

解决此问题的另一种方法是允许空字符串作为正则表达式中的备用有效值(使用“|”)。

正如BalusC在JSF 2中所说的那样,可以将空字符串自动转换为null。要使用的上下文参数是“javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL”,必须将其设置为“true”(另请参阅此答案)。


推荐