Prilagođeni izvor provjere valjanosti u proljetnom pokretanju

1. Pregled

MessageSource snažna je značajka dostupna u proljetnim aplikacijama. To pomaže programerima aplikacija da se bave različitim složenim scenarijima s pisanjem puno dodatnog koda, poput konfiguracije specifične za okruženje, internacionalizacije ili podesivih vrijednosti.

Još jedan scenarij mogao bi biti izmjena zadanih poruka za provjeru valjanosti u korisnije / prilagođenije poruke.

U ovom vodiču, vidjet ćemo kako konfigurirati i upravljati prilagođenom provjerom valjanosti MessageSource u aplikaciji koja koristi Spring Boot.

2. Ovisnosti Mavena

Počnimo s dodavanjem potrebnih Mavenovih ovisnosti:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-validation 

Najnovije verzije ovih knjižnica možete pronaći na Maven Central.

3. Primjer poruke prilagođene provjere valjanosti

Razmotrimo scenarij u kojem moramo razviti aplikaciju koja podržava više jezika. Ako korisnik ne navede točne detalje kao ulaz, željeli bismo prikazati poruke o pogreškama prema korisničkom jeziku.

Uzmimo primjer graha obrasca za prijavu:

javna klasa LoginForm {@NotEmpty (message = "{email.notempty}") @Email private String email; @NotNull privatna lozinka za niz; // standardni getter i postavljači}

Ovdje smo dodali ograničenja za provjeru valjanosti koja provjeravaju nije li e-pošta uopće navedena ili je navedena, ali ne slijedi li standardni stil adrese e-pošte.

Da bismo prikazali prilagođenu poruku i poruku specifičnu za lokalni jezik, možemo pružiti rezervirano mjesto kao što je spomenuto za @Nije prazno bilješka.

The e-mail.notempty svojstvo će iz datoteka svojstava riješiti datoteka MessageSource konfiguracija.

4. Utvrđivanje MessageSource Grah

Kontekst aplikacije delegira razlučivost poruke na grah s točnim imenom messageSource.

ReloadableResourceBundleMessageSource je najčešći MessageSource implementacija koja rješava poruke iz snopova resursa za različite krajeve:

@Bean public MessageSource messageSource () {ReloadableResourceBundleMessageSource messageSource = novo ReloadableResourceBundleMessageSource (); messageSource.setBasename ("put puta: poruke"); messageSource.setDefaultEncoding ("UTF-8"); return messageSource; }

Ovdje je važno navesti osnovno ime jer će se nazivi datoteka specifičnih za lokalni jezik rješavati na temelju navedenog imena.

5. Definiranje LocalValidatorFactoryBean

Da bismo koristili poruke s prilagođenim imenom u datoteci svojstava, kao što je potrebno definirati LocalValidatorFactoryBean i registrirati messageSource:

@Bean public LocalValidatorFactoryBean getValidator () {LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean (); bean.setValidationMessageSource (messageSource ()); grah za povratak; }

Međutim, imajte na umu da ako smo već produžili WebMvcConfigurerAdapter, kako bismo izbjegli zanemarivanje prilagođenog validatora, morali bismo postaviti validator nadjačavanjem getValidator () metoda iz roditeljske klase.

Sada možemo definirati poruku svojstva poput:

email.notempty = ”

umjesto

“Javax.validation.constraints.NotEmpty.message =”

6. Definiranje datoteka svojstava

Posljednji korak je stvaranje datoteke svojstava u src / glavni / resursi imenik s nazivom navedenim u osnovno ime u koraku 4:

# messages.properties email.notempty = Navedite valjani id e-pošte.

Ovdje zajedno s tim možemo iskoristiti prednost internacionalizacije. Recimo da želimo prikazivati ​​poruke za francuskog korisnika na njegovom jeziku.

U ovom slučaju, moramo dodati još jednu datoteku svojstva s imenom poruke_fr. svojstva na istom mjestu (uopće nisu potrebne promjene koda):

# messages_fr.properties email.notempty = Veuillez fournir un identifiant de messagerie valide.

7. Zaključak

U ovom smo članku opisali kako se zadane poruke za provjeru valjanosti mogu mijenjati bez izmjene koda ako se prethodno izvrši ispravna konfiguracija.

Uz to također možemo iskoristiti podršku internacionalizacije kako bismo aplikaciju učinili korisnijom.

Kao i uvijek, puni izvorni kod dostupan je na GitHub-u.


$config[zx-auto] not found$config[zx-overlay] not found