Základy overenia Java Bean

1. Prehľad

V tomto rýchlom výučbe sa venujeme základy overovania platnosti Java bean so štandardným rámcom - JSR 380, tiež známy ako Overenie fazule 2.0.

Overenie vstupu používateľa je vo väčšine aplikácií veľmi častou požiadavkou. A rámec Java Bean Validation sa stal de facto štandardom pre manipuláciu s týmto druhom logiky.

2. JSR 380

JSR 380 je špecifikácia Java API pre validáciu fazule, ktorá je súčasťou Jakarta EE a JavaSE. To zaisťuje, že vlastnosti fazule spĺňajú špecifické kritériá pomocou anotácií ako napr @NotNull, @ Mina @ Max.

Táto verzia vyžaduje program Java 8 alebo novší a využíva výhody nových funkcií pridaných do programu Java 8, ako sú anotácie typov a podpora nových typov, ako napríklad Voliteľné a LocalDate.

Úplné informácie o špecifikáciách nájdete v dokumente JSR 380.

3. Závislosti

Použijeme príklad Maven na znázornenie požadovaných závislostí. Ale samozrejme, tieto tégliky je možné pridať rôznymi spôsobmi.

3.1. Validačné API

Podľa špecifikácie JSR 380, validácia-api závislosť obsahuje štandardné validačné API:

 javax.validation validation-api 2.0.1.Final 

3.2. Referenčná implementácia validačného API

Hibernate Validator je referenčná implementácia validačného API.

Aby sme ho mohli použiť, musíme pridať nasledujúcu závislosť:

 org.hibernate.validator hibernate-validator 6.0.13.Final 

Krátka poznámka: hibernácia-validátor je úplne oddelený od aspektov pretrvávania v režime dlhodobého spánku. Pridaním ako závislosť teda do projektu nepridávame tieto aspekty perzistencie.

3.3. Závislosti výrazového jazyka

JSR 380 podporuje variabilnú interpoláciu, ktorá umožňuje výrazy vo vnútri správ o narušení.

Na analýzu týchto výrazov pridáme znak javax.el závislosť od GlassFish, ktorá obsahuje implementáciu špecifikácie Expression Language:

 org.glassfish javax.el 3.0.0 

4. Používanie overovacích anotácií

Tu si vezmeme a Používateľ bean a pracujte na pridaní nejakej jednoduchej validácie:

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; verejná trieda Používateľ {@NotNull (message = "Meno nemôže mať hodnotu null") súkromné ​​Názov reťazca; @ AssertTrue súkromné ​​booleovské práce; @ Veľkosť (min = 10, max = 200, message = "O mne musí mať 10 až 200 znakov") private String aboutMe; @Min (hodnota = 18, message = "Vek by nemal byť menší ako 18") @Max (hodnota = 150, message = "Vek by nemal byť väčší ako 150") súkromný vek; @Email (message = "Email by mal byť platný") private String email; // štandardní zakladatelia a obstarávatelia} 

Všetky anotácie použité v príklade sú štandardné anotácie JSR:

  • @NotNull potvrdzuje, že anotovaná hodnota vlastnosti nie je nulový.
  • @AssertTrue overuje, či je anotovaná hodnota vlastnosti pravda.
  • @ Veľkosť overuje, či má anotovaná hodnota vlastnosti veľkosť medzi atribútmi min a max; možno aplikovať na String, Zbierka, Mapaa vlastnosti poľa.
  • @ Min potvrdzuje, že anotovaná vlastnosť má hodnotu nie menšiu ako hodnotu atribút.
  • @ Max potvrdzuje, že anotovaná vlastnosť nemá hodnotu väčšiu ako hodnotu atribút.
  • @Email overuje, či je anotovanou vlastnosťou platná e-mailová adresa.

Niektoré anotácie akceptujú ďalšie atribúty, ale správa atribút je spoločný pre všetkých. Toto je správa, ktorá sa zvyčajne vykreslí, keď hodnota príslušnej vlastnosti zlyhá pri overení.

A niekoľko ďalších anotácií, ktoré možno nájsť v JSR:

  • @Nie prázdny potvrdzuje, že vlastnosť nie je prázdna alebo prázdna; možno aplikovať na String, Zbierka, Mapa alebo Pole hodnoty.
  • @NotBlank možno použiť iba na textové hodnoty a potvrdzuje, že vlastnosť nemá hodnotu null alebo medzery.
  • @Pozitívne a @PositiveOrZero použiť na číselné hodnoty a overiť, či sú prísne kladné alebo kladné vrátane 0.
  • @ Negatívne a @NegativeOrZero použiť na číselné hodnoty a overiť, či sú prísne záporné alebo záporné vrátane 0.
  • @Past a @PastOrPresent overiť, či je hodnota dátumu v minulosti alebo v minulosti vrátane súčasnosti; možno použiť na typy dátumov vrátane tých, ktoré sú pridané do Java 8.
  • @Future a @FutureOrPresent overiť, či je hodnota dátumu v budúcnosti alebo v budúcnosti vrátane súčasnosti.

Poznámky k overeniu je možné použiť aj na prvky kolekcie:

Zoznam preferencií;

V takom prípade bude každá hodnota pridaná do zoznamu predvolieb overená.

Tiež špecifikácia podporuje nové Voliteľné typu v prostredí Java 8:

private LocalDate dateOfBirth; public Optional getDateOfBirth () {return Optional.of (dateOfBirth); }

Tu validačný rámec automaticky rozbalí LocalDate hodnotu a overiť ju.

5. Programové overenie

Niektoré rámce - napríklad Spring - majú jednoduché spôsoby, ako spustiť proces overovania pomocou anotácií. Je to hlavne preto, aby sme nemuseli interagovať s API pre programové overovanie.

Poďme teraz na manuálnu cestu a programovo nastavme veci:

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

Na overenie platnosti fazule potrebujeme najskôr a Validátor objekt, ktorý je postavený pomocou a ValidatorFactory.

5.1. Definovanie fazule

Teraz nastavíme tohto neplatného používateľa - s nulou názov hodnota:

User user = new User (); user.setWorking (true); user.setAboutMe („Je to všetko o mne!“); user.setAge (50); 

5.2. Potvrďte fazuľa

Teraz, keď máme Validátor, môžeme svoju fazuľu overiť odovzdaním do potvrdiť metóda.

Akékoľvek porušenie obmedzení stanovených v Používateľ objekt bude vrátený ako a Nastaviť:

Nastaviť priestupky = validator.validate (užívateľ); 

Opakovaním opakovania porušení môžeme všetky správy o porušeniach získať pomocou getMessage metóda:

pre (porušenie ConstraintViolation: porušenia) {log.error (violing.getMessage ()); } 

V našom príklade (ifNameIsNull_nameValidationFails), sada by obsahovala jediný ConstraintViolation so správou „Meno nemôže byť neplatné“.

6. Záver

Tento článok sa zameral na jednoduchý prechod cez štandardné rozhranie Java Validation API. Ukázali sme základy validácie fazule pomocou javax.validation anotácie a API.

Implementáciu konceptov v tomto článku a všetky útržky kódu nájdete ako obvykle na serveri GitHub.