Walidacja identyczności haseł – Hibernate Validator, Spring Framework
Natknąłem się na problem walidacji identyczności haseł w formularzu rejestracji użytkownika. Korzystam ze Spring Frameworka, a do walidacji wykorzystuję bibliotekę Hibernate Validator w wersji 4.
Pierwszym problemem okazał się brak pola confirmPassword w klasie User. Poszperałem na forach i znalazłem w rozwiązania tego problemu:
- Stworzyć dodatkowe pole w klasie User – confirmPassword
- Stworzyć dodatkową klasę, przypuśćmy CreateUserForm, mniej więcej tak:
|
|
Rozwiązanie to wydaje mi się “ładniejsze” niż pierwsze, gdyż nie tworzymy w klasie, wykorzystywanej przy każdym requescie pola, które w ogóle nam jest niepotrzebne.
Kolejnym problemem okazała się walidacja. Chcieliśmy w 100% korzystać z funkcjonalności, jakie dają nam adnotacje z Hibernate Validatora. Brakuje jednak tam adnotacji umożliwiającej porównywanie ze sobą 2 pól.
Tutaj też skorzystałem z forów. Jedna osoba z teamu hibernate poleciła mi wykorzystanie ograniczeń (constraints) przypisanych do klas i zmianę domyślnego błędu zwracanego przez ten walidator.
Poniżej przedstawię rozwiązanie od jakiego doszedłem:
Poniżej znajduje się definicja interfejsu odpowiedzialnego za adnotację @SamePassword
:
|
|
Sama klasa walidatora wygląda tak:
|
|
Aby skorzystać z w/w rozwiązania wystarczy w klasie CreateUserForm dodać adnotację @SamePassword
(na poziomie klasy) i .. tyle.
Mam nadzieję, że komuś się to przyda. W naszym projekcie adnotacje znacznie zwiększyły czytelność kodu, a jest to bardzo istotne przy pracy grupowej.