Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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\\-\\.]+)'+'(\\.)([a-zA-Z]{2,4})$"

but I have as email address [email protected], 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.

like image 910
Tim Avatar asked Jan 12 '11 22:01

Tim


3 Answers

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.

like image 172
Javi Avatar answered Sep 21 '22 12:09

Javi


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.

like image 40
MatBanik Avatar answered Sep 22 '22 12:09

MatBanik


You can use @Email from Hibernate Validator:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.1.Final</version>
    </dependency>
like image 36
Bassem Reda Zohdy Avatar answered Sep 23 '22 12:09

Bassem Reda Zohdy