Specifična ograničenja hibernacijskog validatora

1. Pregled

U ovom uputstvu pregledat ćemo ograničenja Hibernate Validatora, koja su ugrađena u Hibernate Validator, ali su izvan specifikacije Bean Validation.

Ukratko o provjeri valjanosti Bean-a pogledajte naš članak o osnovama provjere Java Bean-ove provjere.

2. Postavljanje hibernacijskog validatora

U najmanju ruku, trebali bismo dodati Hibernate Validator u naše ovisnosti:

 org.hibernate.validator hibernate-validator 6.0.16.Final 

Imajte na umu da Hibernate Validator ne ovisi o Hibernate, ORM, o čemu smo govorili u mnogim drugim člancima.

Uz to, neke napomene koje ćemo uvesti primjenjuju se samo ako naš projekt koristi određene knjižnice. Dakle, za svaku od njih naznačit ćemo potrebne ovisnosti.

3. Potvrđivanje vrijednosti povezanih s novcem

3.1. Provjera valjanosti brojeva kreditnih kartica

Važeći brojevi kreditnih kartica moraju zadovoljavati kontrolnu sumu koju izračunavamo pomoću Luhnovog algoritma. The @Broj kreditne kartice ograničenje uspije kada a niz zadovoljava kontrolnu sumu.

@Broj kreditne kartice ne izvršava bilo koju drugu provjeru na ulaznom nizu. Konkretno, ne provjerava duljinu unosa. Stoga može otkriti samo brojeve koji su nevaljani zbog male pogreške u kucanju.

Imajte na umu da, prema zadanim postavkama, ograničenje ne uspije ako niz sadrži znakove koji nisu znamenke, ali možemo mu reći da ih zanemari:

@CreditCardNumber (ignoreNonDigitCharacters = true) private String lenientCreditCardNumber;

Zatim možemo uključiti znakove poput razmaka ili crtica:

provjere valjanosti.setLenientCreditCardNumber ("7992-7398-713"); constraintViolations = validator.validateProperty (provjere valjanosti, "lenientCreditCardNumber"); assertTrue (constraintViolations.isEmpty ());

3.2. Potvrđivanje monetarnih vrijednosti

The @Valuta validator provjerava je li zadani novčani iznos u navedenoj valuti:

@ Valuta ("EUR") privatno stanje MonetaryAmount;

Razred MonetaryAmount je dio Java Moneya. Stoga, @Valuta primjenjuje se samo kada je dostupna implementacija Java Money.

Nakon što pravilno postavimo Java Money, možemo provjeriti ograničenje:

bean.setBalance (Money.of (novi BigDecimal (100.0), Monetary.getCurrency ("EUR"))); constraintViolations = validator.validateProperty (grah, "ravnoteža"); assertEquals (0, constraintViolations.size ());

4. Provjera raspona

4.1. Numerički i novčani rasponi

Specifikacija provjere graha definira nekoliko ograničenja koja možemo primijeniti na numerička polja. Osim toga, Hibernate Validator pruža i korisnu napomenu, @ Range, to djeluje kao kombinacija @ Min i @Max,uključujući podudaranje raspona:

@Range (min = 0, max = 100) private BigDecimal posto;

Kao @ Min i @Max, @ Range primjenjivo je na poljima primitivnih tipova brojeva i njihovim omotima; BigInteger i BigDecimal, Niz prikazi gore navedenog i, konačno, Novčana vrijednost polja.

4.2. Trajanje vremena

Uz standardne JSR 380 napomene za vrijednosti koje predstavljaju točke u vremenu, Hibernate Validator uključuje ograničenja za Trajanjes također. Svakako provjerite Razdoblje i Trajanje najprije klase Java Timea.

Tako, možemo provesti minimalno i maksimalno trajanje svojstva:

@DurationMin (dana = 1, sati = 2) @DurationMax (dana = 2, sata = 1) privatno trajanje trajanja;

Čak i ako ih ovdje nismo prikazali sve, bilješka ima parametre za sve jedinice vremena od nanosekundi do dana.

Imajte na umu da, prema zadanim postavkama, uključene su minimalne i maksimalne vrijednosti. Odnosno, vrijednost koja je potpuno jednaka minimalnoj ili maksimalnoj proći će provjeru valjanosti.

Ako želimo da vrijednosti granica budu nevaljane, definiramo uključivo svojstvo da je lažno:

@DurationMax (minute = 30, uključujući = lažno)

5. Provjeravanje nizova

5.1. Duljina niza

Možemo upotrijebiti dva malo različita ograničenja kako bismo primijenili da je niz određene duljine.

Općenito, htjeli bismo osigurati duljinu niza u znakovima - onu koju mjerimo s duljina metoda - nalazi se između minimuma i maksimuma. U tom slučaju koristimo @ Dužina na String svojstvu ili polju:

@Length (min = 1, max = 3) private String someString;

Međutim, zbog zamršenosti Unicodea, ponekad se duljina znakova i duljina kodnih točaka razlikuju. Kada želimo provjeriti ovo drugo, koristimo @CodePointLength:

@CodePointLength (min = 1, max = 3) private String someString;

Na primjer, niz "aa \ uD835 \ uDD0A" dugačak je 4 znaka, ali sadrži samo 3 kodne točke, tako da neće uspjeti s prvim ograničenjem i proslijediti drugo.

Također, s obje bilješke možemo izostaviti minimalnu ili maksimalnu vrijednost.

5.2. Provjere nizova znamenki

Već smo vidjeli kako provjeriti je li niz važeći broj kreditne kartice. Međutim, Hibernate Validator uključuje nekoliko drugih ograničenja za nizove znamenki.

Prva koju pregledamo je @LuhnCheck. Ovo je generalizirana verzija @Broj kreditne kartice, u tome provodi istu provjeru, ali omogućuje dodatne parametre:

@LuhnCheck (startIndex = 0, endIndex = Integer.MAX_VALUE, checkDigitIndex = -1) private String someString;

Ovdje smo prikazali zadane vrijednosti parametara, pa je gore navedeno ekvivalentno jednostavnom @LuhnCheck bilješka.

Ali, kao što vidimo, provjeru možemo izvršiti na podnizu (startIndex i endIndex) i recite ograničenju koja je znamenka znamenka kontrolne sume, s -1 što znači zadnju u provjerenom podnizu.

Ostala zanimljiva ograničenja uključuju provjeru modula 10 (@ Mod10Check) i provjeru modula 11 (@ Mod11Check), koji se obično koriste za crtične kodove i druge kodove poput ISBN-a.

Međutim, za te specifične slučajeve Hibernate Validator pruža ograničenje za provjeru ISBN kodova, @ISBN, kao i an @EAN ograničenje za EAN crtične kodove.

5.3. Provjera URL-a i HTML-a

The @Url ograničenje provjerava je li niz valjani prikaz URL-a. Uz to možemo provjeriti ima li određena komponenta URL-a određenu vrijednost:

@URL (protocol = "https") private String url;

Tako možemo provjeriti protokol, hosta i priključak. Ako to nije dovoljno, postoji regularni izraz svojstvo koje možemo koristiti za podudaranje URL-a s regularnim izrazom.

Također možemo provjeriti sadrži li svojstvo "siguran" HTML kôd (na primjer, bez oznaka skripte):

@SafeHtml private String html;

@SafeHtml koristi JSoup knjižnicu, koja mora biti uključena u naše ovisnosti.

HTML higijensku higijenu možemo prilagoditi našim potrebama pomoću ugrađenih bijelih popisa oznaka ( bijela lista svojstvo napomene) i uključujući dodatne oznake i atribute ( additionalTags i additionalTagsWithAttributes parametri).

6. Ostala ograničenja

Spomenimo ukratko da Hibernate Validator uključuje neka ograničenja specifična za državu i lokalitet, posebno za neke brazilske i poljske identifikacijske brojeve, kodove poreznih obveznika i slično. Potpuni popis potražite u odgovarajućem odjeljku dokumentacije.

Također, možemo provjeriti da zbirka ne sadrži duplikate s @UniqueElements.

Napokon, za složene slučajeve koji nisu obuhvaćeni postojećim bilješkama, možemo se pozvati na skriptu napisanu u JSR-223 kompatibilnom skriptnom mehanizmu. Naravno, dotaknuli smo se JSR-223 u našem članku o Nashornu, implementaciji JavaScript-a uključenoj u moderne JVM-ove.

U ovom je slučaju napomena na razini klase i skripta se poziva na cijeloj instanci, prosljeđuje se kao varijabla _ovaj:

@ScriptAssert (lang = "nashorn", script = "_this.valid") javna klasa AdditionalValidations {private boolean valid = true; // standardni geteri i postavljači}

Zatim možemo provjeriti ograničenje na cijeloj instanci:

bean.setValid (false); constraintViolations = validator.validate (grah); assertEquals (1, constraintViolations.size ());

7. Zaključak

U ovom smo članku naveli ograničenja u Hibernate Validatoru koja nadilaze minimalni skup definiran u specifikaciji Bean Validation.

Provedbu svih ovih primjera i isječaka koda možete pronaći na GitHubu.


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