Java / Spring MVC 3 validation of an email address
I have a Java backend with Spring MVC and I am using validation in this way on my domain object for an email address:
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;
But all I get with these lines of code
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())
}
I get this on the console:
email - must match "^([a-zA-Z0-9\\-\\.\\_]+)'+'(\\@)([a-zA-Z0-9\\-\\.]+)'+'(\\.)([开发者_JAVA百科a-zA-Z]{2,4})$"
but I have as email address test@test.com
, so the regexp does not match.
So I have two prolems:
- What's wrong here?
- And how can I define a error message on my own, because display this to the user, that is not a good thing :-)
Thank you in advance for your help and Best Regards.
If you use Hibernate Validator you can use @Email annotation Anyway you can create your custom contraint annotation and set a custom message to show in your resource properties file.
First try simpler regex such as this:
"\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b"
Than you can try RFC 2822 version:
"(?:[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])+)\\])"
Let me know if the either worked for you.
Also take look at this package
org.springmodules.validation.bean.conf.loader.annotation.handler
here
http://www.springbyexample.org/examples/spring-modules-validation-module.html
It might be better alternative.
You can use @Email
from Hibernate Validator:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
Your regex has a couple of instances of '+'
in it, which is kind of odd. e-mail addresses aren't usually required to have single quotes in them :) I think perhaps that is meant to be concatenating pieces of the String, and those should be double quotes?
For defining your own message, you just add message="{someWay.of.definingCodes}"
to the annotation. Then define a translation for it in ValidationMessages.properties
in the default package.
Alternately hibernate validator provides org.hibernate.validator.Email
if you're willing to depend on a vendor extension.
精彩评论