Walidacja fasoli wiosennej na podstawie adnotacji

Badam podejście oparte na adnotacjach do sprawdzania poprawności użycia Spring bean przy użyciumoduły sprężynowe. Wten samouczek, następujący komponent bean (pominięte gettery i settery) jest używany jako przykład:

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;  
}

Komunikat o błędzie używany w przypadku nieprzestrzegania określonej reguły sprawdzania poprawności powinien być zgodny z tym formatem:

bean-class.bean-propery[validation-rule]=Validation Error message

Przykłady pokazanej powyżej klasy obejmują:

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.

Fakt, że klucze wiadomości zawierają nazwę klasy, przedstawia kilka problemów:

Jeśli nazwa klasy zostanie zmieniona, klucze wiadomości również muszą zostać zmienione

Jeśli mam inną klasę (np. Osobę) z własnością e-mail, która jest sprawdzana identycznie z User.email, muszę zduplikować wiadomości, np.

Person.email [not.blank] = Podaj swój adres e-mail.
Person.email [email] = Podaj poprawny adres e-mail.
Person.email [length] = Wpisz nie więcej niż {2} znaków.

W rzeczywistości dokumentacja twierdzi, że możliwe jest skonfigurowanie domyślnej wiadomości dla określonej reguły (np. @Email) w następujący sposób:

email=email address is invalid

Ten domyślny komunikat powinien być używany, jeśli nie można znaleźć komunikatu specyficznego dla komponentu dla reguły. Jednak z mojego doświadczenia wynika, że ​​to po prostu nie działa.

Alternatywnym mechanizmem unikania duplikatów wiadomości jest przekazanie klucza komunikatu o błędzie do adnotacji reguły. Załóżmy na przykład, że zdefiniowałem następujący domyślny komunikat o błędzie dla reguły @Email

badEmail=Email address is invalid

Ten komunikat powinien zostać użyty, jeśli przypiszę odpowiednią właściwość w ten sposób:

@Email(errorCode="badEmail")
private String email;

Jednak spróbowałem tego, znowu i znowu, to po prostu nie działa. Czy ktoś znalazł sposób na uniknięcie duplikowania komunikatów o błędach podczas korzystania z tej struktury sprawdzania poprawności?

questionAnswers(3)

yourAnswerToTheQuestion