Java / Spring MVC 3 проверка адреса электронной почты - PullRequest
20 голосов
/ 13 января 2011

У меня есть Java-бэкэнд с Spring MVC, и я использую проверку таким образом на своем доменном объекте для адреса электронной почты:

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, поэтому регулярное выражение не совпадает.

Итак, у меня есть две проблемы:

  • Что здесь не так?
  • И как я могу определить сообщение об ошибке самостоятельно, потому что отображать это пользователю, это не очень хорошая вещь: -)

Заранее благодарю за помощь и наилучшие пожелания.

Ответы [ 4 ]

43 голосов
/ 13 января 2011

Если вы используете Hibernate Validator , вы можете использовать @ Email-аннотацию В любом случае вы можете создать свою собственную аннотацию противопоказаний и настроить свое собственное сообщение для отображения в файле свойств ресурса.

9 голосов
/ 13 января 2011

Сначала попробуйте более простое регулярное выражение, например:

"\\b[A-Z0-9._%+-]+@[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

Это может быть лучшей альтернативой.

6 голосов
/ 26 сентября 2011

Вы можете использовать @Email из Hibernate Validator :

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.1.Final</version>
    </dependency>
2 голосов
/ 13 января 2011

В вашем регулярном выражении есть пара экземпляров '+', что довольно странно.Адреса электронной почты обычно не должны содержать одинарные кавычки :) Я думаю, что это может быть объединение частей строки, и это должны быть двойные кавычки?

Для определения вашего собственного сообщения,Вы просто добавляете message="{someWay.of.definingCodes}" к аннотации.Затем определите перевод для него в ValidationMessages.properties в пакете по умолчанию.

В качестве альтернативы средство проверки гибернации предоставляет org.hibernate.validator.Email, если вы хотите зависеть от расширения поставщика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...