电子邮件地址的Java / Spring MVC 3验证


问题内容

我具有Spring MVC的Java后端,并且通过这种方式在域对象中使用验证来获取电子邮件地址:

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
...
@NotNull
@Size(min = 1, max = 100)
@Pattern(regexp="^([a-zA-Z0-9\\-\\.\\_]+)'+'(\\@)([a-zA-Z0-9\\-\\.]+)'+'(\\.)([a-zA-Z]{2,4})$")
private String email;

但是我得到的这些代码行

Set<ConstraintViolation<Person>> failures = validator.validate(personObject);
...
Map<String, String> failureMessages = new HashMap<String, String>();
for (ConstraintViolation<Person> failure : failures) {
    failureMessages.put(failure.getPropertyPath().toString(), failure.getMessage());
    System.out.println(failure.getPropertyPath().toString()+" - "+failure.getMessage())
}

我在控制台上得到这个:

email - must match "^([a-zA-Z0-9\\-\\.\\_]+)'+'(\\@)([a-zA-Z0-9\\-\\.]+)'+'(\\.)([a-zA-Z]{2,4})$"

但我有一个电子邮件地址test@test.com,因此regexp不匹配。

所以我有两个问题:

  • 怎么了
  • 以及如何自行定义错误消息,因为将错误消息显示给用户,这不是一件好事:-)

预先感谢您的帮助和最良好的问候。


问题答案:

如果使用Hibernate
Validator
,则可以使用@Email批注。无论如何,您可以创建自定义约束注释并设置自定义消息以显示在资源属性文件中。