Я изучаю подход, основанный на аннотации, для проверки Spring beans с помощью spring modules. В этот учебник в качестве примера используется bean (getters and seters опущены):
public final class User {
@NotBlank
@Length(max = 80)
private String name;
@NotBlank
@Email
@Length(max = 80)
private String email;
@NotBlank
@Length(max = 4000)
private String text;
}
Сообщение об ошибке, которое используется, если определенное правило проверки не оспаривается, должно следовать этому формату:
bean-class.bean-propery[validation-rule]=Validation Error message
Примеры для класса, показанного выше, включают в себя:
User.email[not.blank]=Please enter your e-mail address.
User.email[email]=Please enter a valid e-mail address.
User.email[length]=Please enter no more than {2} characters.
Тот факт, что ключи сообщения содержат имя класса, представляет собой пару проблем:
- Если класс переименован, необходимо также изменить клавиши сообщения
-
Если у меня есть другой класс (например, Person) с свойством электронной почты, которое проверено идентично с User.email, мне нужно дублировать сообщения, например.
Person.email [not.blank] = Пожалуйста, введите свой адрес электронной почты.
Person.email [email] = Пожалуйста, введите действительный адрес электронной почты.
Person.email [length] = Введите не более {2} символов.
Фактически, в документации утверждается, что можно настроить сообщение по умолчанию для определенного правила (например, @Email) следующим образом:
email=email address is invalid
Это сообщение по умолчанию должно использоваться, если не удается найти сообщение bean для конкретного правила. Однако, мой опыт заключается в том, что это просто не работает.
Альтернативным механизмом предотвращения дублирования сообщений является передача ключа сообщения об ошибке в аннотацию правила. Например, предположим, что я определил следующее сообщение об ошибке по умолчанию для правила @Email
badEmail=Email address is invalid
Это сообщение должно использоваться, если я аннотирую соответствующее свойство следующим образом:
@Email(errorCode="badEmail")
private String email;
Однако я попробовал это, и снова, он просто не работает. Кто-нибудь нашел способ избежать дублирования сообщений об ошибках при использовании этой рамки проверки?