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

问题描述:

的验证我有Spring MVC的一个Java后端,我这样一个电子邮件地址我的域对象上使用验证:的Java/Spring MVC的3电子邮件地址

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})$" 

,但我有电子邮件地址[email protected],所以正则表达式不匹配。

所以我有两个prolems:

  • 有什么不对吗?
  • 我如何定义我自己的一个错误信息,因为这显示给用户,这是不是:-)

预先感谢您的帮助和问候一件好事。

+0

什么版本的Spring MVC您使用的是? – 2011-01-12 22:28:00

+0

最新版本3.0.5。 – Tim 2011-01-12 22:32:48

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

首先尝试简单的正则表达式像这样:

"\\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}\\b" 

比你可以尝试RFC 2822版本:

"(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])" 

让我知道,如果无论是对你工作。

还拿起来看看这款包

org.springmodules.validation.bean.conf.loader.annotation.handler 

这里
http://www.springbyexample.org/examples/spring-modules-validation-module.html

这可能是更好的选择。

+0

第二个工程,但我得到另一个错误...我必须看看有什么问题`javax.validation。ConstraintViolationException:验证组在更新时间[com.mydomain.myproject.domain.Person]时失败[javax.validation.groups.Default,]` – Tim 2011-01-12 22:54:23

+0

但没有响应。我在这里创建了一个问题:http://*.com/questions/4675204/javax-validation-constraintviolationexception-validation-failed-for-classes-duri,因为我不知道为什么会出现这个错误。如果我检查对象,没有失败,但在提交对象更新时发生错误。 – Tim 2011-01-12 23:40:41

你的正则表达式中有几个'+'的实例,这有点奇怪。电子邮件地址通常不需要单引号在他们:)我想也许这是为了连接字符串的部分,这些应该是双引号?

要定义您自己的消息,只需将message="{someWay.of.definingCodes}"添加到注释。然后在默认包中为其定义ValidationMessages.properties中的翻译。

或者,如果您愿意依赖供应商扩展,则hibernate验证程序会提供org.hibernate.validator.Email

您可以使用@EmailHibernate Validator

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.4.1.Final</version> 
    </dependency>