Ответ 1
Если вы используете Hibernate Validator, вы можете использовать @Аннотацию @a > В любом случае вы можете создать свою аннотацию пользовательских комментариев и установить настраиваемое сообщение для отображения в файле свойств ресурса.
У меня есть 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})$"
но у меня есть адрес электронной почты [email protected]
, поэтому regexp не соответствует.
Итак, у меня есть два пролета:
Заранее благодарю вас за вашу помощь и наилучшие пожелания.
Если вы используете Hibernate Validator, вы можете использовать @Аннотацию @a > В любом случае вы можете создать свою аннотацию пользовательских комментариев и установить настраиваемое сообщение для отображения в файле свойств ресурса.
Сначала попробуйте упростить регулярное выражение, например:
"\\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
Возможно, это была бы лучшая альтернатива.
Вы можете использовать @Email
из Hibernate Validator:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
В вашем регулярном выражении есть несколько экземпляров '+'
, что является нечетным. адреса электронной почты обычно не требуются, чтобы иметь одинарные кавычки в них:) Я думаю, что, возможно, это предназначено для объединения фрагментов строки, а это должны быть двойные кавычки?
Чтобы определить собственное сообщение, просто добавьте message="{someWay.of.definingCodes}"
в аннотацию. Затем определите для него перевод в ValidationMessages.properties
в пакете по умолчанию.
Альтернативный валидатор hibernate предоставляет org.hibernate.validator.Email
, если вы хотите зависеть от расширения поставщика.