Я исследую основанный на аннотациях подход к проверке bean-компонентов Spring с использованием пружинных модулей . В этого урока в качестве примера используется следующий компонент (методы getter и setters опущены):
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 [длина] = Пожалуйста, введите не более {2} символов.
На самом деле, в документации утверждается, что возможно настроить сообщение по умолчанию для определенного правила (например, @Email), например:
email=email address is invalid
Это сообщение по умолчанию следует использовать, если не может быть найдено специфичное для bean-сообщения сообщение для правила. Однако мой опыт показывает, что это просто не работает.
Альтернативный механизм, позволяющий избежать дублирования сообщений, - передать ключ сообщения об ошибке в аннотацию правила. Например, предположим, что я определил следующее сообщение об ошибке по умолчанию для правила @Email
badEmail=Email address is invalid
Это сообщение следует использовать, если я аннотирую соответствующее свойство следующим образом:
@Email(errorCode="badEmail")
private String email;
Однако я пробовал это время от времени, это, кажется, не работает. Кто-нибудь нашел способ избежать дублирования сообщений об ошибках при использовании этой структуры проверки?