Osnove provjere Java Bean-a

1. Pregled

U ovom brzom vodiču, pokrivamo osnove provjere valjanosti Java zrna sa standardnim okvirom - JSR 380, poznat i kao Provjera graha 2.0.

Provjera korisničkog unosa super je čest zahtjev u većini aplikacija. A okvir za provjeru Java Bean-a postao je de facto standard za rukovanje ovom vrstom logike.

2. JSR 380

JSR 380 je specifikacija Java API-ja za provjeru graha, dio Jakarte EE i JavaSE. To osigurava da svojstva zrna zadovoljavaju određene kriterije, koristeći bilješke kao što su @NotNull, @ Min, i @Max.

Ova verzija zahtijeva Javu 8 ili noviju i koristi prednosti novih značajki dodanih u Javi 8, kao što su napomene o tipovima i podrška za nove tipove poput Neobvezno i LocalDate.

Za potpune informacije o specifikacijama, pročitajte JSR 380.

3. Ovisnosti

Upotrijebit ćemo primjer Mavena da pokažemo potrebne ovisnosti. Ali naravno, ove se staklenke mogu dodavati na razne načine.

3.1. API za provjeru valjanosti

Prema specifikaciji JSR 380, validacija-api ovisnost sadrži standardne API-je za provjeru valjanosti:

 javax.provjera valjanosti-api 2.0.1.Final 

3.2. Implementacija referentnog API-ja za provjeru valjanosti

Hibernate Validator referentna je implementacija API-ja za provjeru valjanosti.

Da bismo je koristili, moramo dodati sljedeću ovisnost:

 org.hibernate.validator hibernate-validator 6.0.13.Final 

Kratka napomena: hibernacijski validator je potpuno odvojen od aspekata postojanosti hibernacije. Dakle, dodavanjem kao ovisnosti, ne dodajemo ove aspekte ustrajnosti u projekt.

3.3. Ovisnosti o jeziku izraza

JSR 380 podržava varijabilnu interpolaciju, dopuštajući izraze unutar poruka o kršenju.

Da bismo raščlanili ove izraze, dodati ćemo javax.el ovisnost o GlassFishu, koja sadrži implementaciju specifikacije jezika izraza:

 org.glassfish javax.el 3.0.0 

4. Korištenje napomena o provjeri valjanosti

Evo, uzet ćemo Korisnik grah i radite na tome da mu dodate nekoliko jednostavnih provjera valjanosti:

import javax.validation.constraints.AssertTrue; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import javax.validation.constraints.Email; javni razred Korisnik {@NotNull (message = "Ime ne može biti null") ime privatnog niza; @AssertTrue privatni logički rad; @Size (min = 10, max = 200, message = "About Me mora sadržavati između 10 i 200 znakova") private String aboutMe; @Min (vrijednost = 18, message = "Dob ne smije biti manja od 18") @Max (vrijednost = 150, message = "Dob ne smije biti veća od 150") private int age; @Email (message = "E-pošta treba biti valjana") private String email; // standardni postavljači i dobivači} 

Sve bilješke korištene u primjeru su standardne JSR bilješke:

  • @NotNull potvrđuje da označena vrijednost svojstva nije null.
  • @AssertTrue provjerava je li označena vrijednost svojstva pravi.
  • @Veličina provjerava da li označena vrijednost svojstva ima veličinu između atributa min i maks; može se primijeniti na Niz, Kolekcija, Karta, i svojstva niza.
  • @ Min potvrđuje da označeno svojstvo ima vrijednost koja nije manja od vrijednost atribut.
  • @Max potvrđuje da označeno svojstvo nema vrijednost veću od vrijednost atribut.
  • @E-mail provjerava je li označeno svojstvo valjana adresa e-pošte.

Neke bilješke prihvaćaju dodatne atribute, ali poruka atribut je zajednički svima njima. To je poruka koja se obično prikazuje kada vrijednost odgovarajućeg svojstva ne uspije provjeriti.

I neke dodatne napomene koje se mogu naći u JSR:

  • @Nije prazno potvrđuje da svojstvo nije ništavno ili prazno; može se primijeniti na Niz, Kolekcija, Karta ili Polje vrijednosti.
  • @NetBlank može se primijeniti samo na tekstualne vrijednosti i potvrđuje da svojstvo nije null ili razmak.
  • @Pozitivan i @PozitiveOrZero primijeniti na numeričke vrijednosti i potvrditi da su strogo pozitivne ili pozitivne, uključujući 0.
  • @Negativan i @NegativeOrZero primijeniti na numeričke vrijednosti i potvrditi da su strogo negativne ili negativne, uključujući 0.
  • @Prošlost i @PastOrPresent potvrditi da je vrijednost datuma prošlost ili prošlost, uključujući sadašnjost; može se primijeniti na vrste datuma, uključujući one dodane u Javi 8.
  • @Budućnost i @FutureOrPresent potvrditi da je vrijednost datuma u budućnosti ili u budućnosti, uključujući sadašnjost.

Bilješke o provjeri mogu se primijeniti i na elemente zbirke:

Popis postavki;

U tom će slučaju biti potvrđena bilo koja vrijednost dodana na popis postavki.

Također, specifikacija podržava novo Neobvezno tip u Javi 8:

private LocalDate dateOfBirth; javni Izborni getDateOfBirth () {povratak Izborni.of (dateOfBirth); }

Ovdje će se okvir za provjeru automatski razmotati LocalDate vrijednost i potvrditi je.

5. Programska provjera valjanosti

Neki okviri - poput Proljeća - imaju jednostavne načine za pokretanje postupka provjere valjanosti samo korištenjem napomena. To je uglavnom zato da ne moramo komunicirati s programskim API-jem za provjeru valjanosti.

Idemo sada ručnim putem i postavimo stvari programski:

Tvornica ValidatorFactory = Validation.buildDefaultValidatorFactory (); Validator validator = factory.getValidator (); 

Da bismo potvrdili grah, prvo nam treba a Provjerivač objekt koji se gradi pomoću a ValidatorFactory.

5.1. Definiranje graha

Sad ćemo postaviti ovog nevaljanog korisnika - s nulom Ime vrijednost:

Korisnik korisnik = novi korisnik (); user.setWorking (true); user.setAboutMe ("Sve o meni!"); user.setAge (50); 

5.2. Potvrdite grah

Sad kad imamo Provjerivač, možemo potvrditi svoj grah dodavanjem u potvrditi metoda.

Sva kršenja ograničenja definiranih u Korisnik objekt će biti vraćen kao Postavi:

Postavi kršenja = validator.validate (korisnik); 

Ponavljanjem prekršaja možemo dobiti sve poruke o kršenju pomoću getMessage metoda:

za (kršenje ConstraintViolation: kršenja) {log.error (порушення.getMessage ()); } 

U našem primjeru (ifNameIsNull_nameValidationFails), skup bi sadržavao jedan ConstraintViolation s porukom “Ime ne može biti null”.

6. Zaključak

Ovaj se članak usredotočio na jednostavno prolazak kroz standardni Java Validation API. Pokazali smo osnove provjere valjanosti graha javax.valifikacija napomene i API-ji.

Kao i obično, implementacija koncepata u ovom članku i svi isječci koda mogu se naći na GitHubu.