Java Bean validálás alapjai
1. Áttekintés
Ebben a gyors bemutatóban bemutatjuk a Java bab validálásának alapjai a standard kerettel - JSR 380, más néven Babellenőrzés 2.0.
A felhasználói adatok ellenőrzése a legtöbb alkalmazásban rendkívül általános követelmény. És a Java Bean Validation keretrendszer az efféle logika kezelésének de facto szabványává vált.
2. JSR 380
A JSR 380 a Java API specifikációja a babellenőrzéshez, a Jakarta EE és a JavaSE része. Ez biztosítja, hogy a bab tulajdonságai megfelelnek a meghatározott kritériumoknak, olyan kommentárokkal, mint @Nem nulla, @Min, és @Max.
Ehhez a verzióhoz Java 8-as vagy újabb verzió szükséges, és kihasználja a Java 8-ban hozzáadott új funkciók előnyeit, például a típusjegyzeteket és az új típusok Választható és LocalDate.
A specifikációkkal kapcsolatos teljes információért olvassa el a JSR 380-at.
3. Függőségek
Maven példával fogjuk bemutatni a szükséges függőségeket. De természetesen ezek az üvegek különféle módokon adhatók hozzá.
3.1. Validációs API
A JSR 380 specifikáció szerint a validálás-api dependency tartalmazza a standard validációs API-kat:
javax.validation validation-api 2.0.1.Final
3.2. Validációs API referencia megvalósítás
A Hibernate Validator az érvényesítési API referencia megvalósítása.
Használatához hozzá kell adnunk a következő függőséget:
org.hibernate.validator hibernate-validator 6.0.13.Final
Gyors megjegyzés: hibernate-validator teljesen elkülönül a Hibernate perzisztencia szempontjaitól. Tehát azzal, hogy függőségként adjuk hozzá, nem vesszük ezeket a perzisztencia szempontokat a projektbe.
3.3. Kifejezés nyelvfüggőségei
A JSR 380 támogatja a változó interpolációt, lehetővé téve a szabálysértési üzeneteken belüli kifejezéseket.
A kifejezések elemzéséhez hozzáadjuk a javax.el függőség a GlassFish-től, amely az Expression Language specifikáció megvalósítását tartalmazza:
org.glassfish javax.el 3.0.0
4. Validációs kommentárok használata
Itt veszünk egy Felhasználó babot, és dolgozzon néhány egyszerű érvényesítés hozzáadásával:
importálja a javax.validation.constraints.AssertTrue; javax.validation.constraints.Max importálása; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; importálja a javax.validation.constraints.Size; javax.validation.constraints.Email importálása; public class Felhasználó {@NotNull (message = "A név nem lehet null") privát karakterlánc neve; @AssertTrue privát logikai munka; @Size (min = 10, max = 200, message = "A Rólam 10 és 200 karakter között kell lennie") privát String aboutMe; @Min (érték = 18, üzenet = "Az életkor nem lehet kevesebb 18-nál") @Max (érték = 150, üzenet = "Az életkor nem lehet 150-nél nagyobb") private int age; @Email (message = "Az e-mailnek érvényesnek kell lennie") privát karakterlánc e-mail; // szabványos beállítók és szerelők}
A példában használt összes kommentár JSR szabványos kommentár:
- @Nem nulla ellenőrzi, hogy a kommentált tulajdonság értéke nem nulla.
- @ AssertTrue ellenőrzi, hogy a kommentált tulajdonság értéke igaz.
- @Méret ellenőrzi, hogy a kommentált tulajdonságértéknek van-e mérete az attribútumok között min és max; alkalmazható Húr, Gyűjtemény, Térképés tömb tulajdonságok.
- @Min megerősíti, hogy a kommentált tulajdonság értéke nem kisebb, mint a érték tulajdonság.
- @Max ellenőrzi, hogy a kommentált tulajdonság értéke nem nagyobb, mint a érték tulajdonság.
- @Email ellenőrzi, hogy a kommentált tulajdonság érvényes e-mail cím.
Néhány megjegyzés további attribútumokat fogad el, de a üzenet tulajdonság mindegyikükön közös. Ez az üzenet általában akkor jelenik meg, ha az adott tulajdonság értéke nem érvényesül.
És néhány további jegyzet, amelyek megtalálhatók a JSR-ben:
- @Nem üres igazolja, hogy a tulajdonság nem semleges vagy üres; alkalmazható Húr, Gyűjtemény, Térkép vagy Sor értékek.
- @NotBlank csak szöveges értékekre alkalmazható, és ellenőrzi, hogy a tulajdonság nem null vagy üres szóköz.
- @Pozitív és @PositiveOrZero vonatkozik a numerikus értékekre és igazolja, hogy szigorúan pozitívak, vagy pozitívak, beleértve a 0-t is.
- @Negatív és @NegativeOrZero vonatkozik a numerikus értékekre, és igazolja, hogy szigorúan negatívak vagy negatívak, beleértve a 0-t is.
- @Múlt és @PastOrPresent igazolja, hogy a dátum értéke múltban vagy múltban van, beleértve a jelent; dátumtípusokra alkalmazható, ideértve a Java 8-ba is felvett típusokat.
- @Jövő és @FutureOrPresent ellenőrizze, hogy a dátum értéke a jövőben van-e, vagy a jövőben, beleértve a jelent.
Az érvényesítési kommentárok a gyűjtemény elemeire is alkalmazhatók:
Listapreferenciák;
Ebben az esetben a beállításlistához hozzáadott érték érvényesül.
Továbbá a specifikáció támogatja az újat Választható típus Java 8-ban:
privát LocalDate dateOfBirth; public Opcionális getDateOfBirth () {return Optional.of (dateOfBirth); }
Itt az érvényesítési keretrendszer automatikusan kibontja a LocalDate értéket és érvényesítse.
5. Programos validálás
Néhány keretrendszer - például a Spring - egyszerű módszerekkel indíthatja el az érvényesítési folyamatot pusztán kommentárok használatával. Ez elsősorban azért van, hogy ne kelljen interakcióba lépnünk az automatizált validációs API-val.
Most menjünk a kézi úton, és állítsuk be a programokat:
ValidatorFactory gyár = Validation.buildDefaultValidatorFactory (); Validator validator = gyár.getValidator ();
A bab validálásához először a Validator objektum, amelyet a ValidatorFactory.
5.1. A bab meghatározása
Most be fogjuk állítani ezt az érvénytelen felhasználót - nullával név érték:
Felhasználó felhasználó = új Felhasználó (); user.setWorking (true); user.setAboutMe ("Minden rólam szól!"); user.setAge (50);
5.2. Érvényesítse a babot
Most, hogy van egy Validator, a babunkat úgy igazolhatjuk, hogy átadjuk a érvényesít módszer.
A. - ban meghatározott korlátozások bármely megsértése Felhasználó objektum a Készlet:
Készlet megsértések = validator.validate (felhasználó);
A jogsértések ismétlésével az összes szabálysértési üzenetet megkaphatjuk a getMessage módszer:
for (ConstraintViolation megsértése: megsértések) {log.error (fault.getMessage ()); }
Példánkban (ifNameIsNull_nameValidationFails), a készlet egyetlen példányt tartalmazna ConstraintViolation a „Név nem lehet null” üzenettel.
6. Következtetés
Ez a cikk a standard Java Validation API egyszerű átadására összpontosított. Megmutattuk a bab validálás alapjait javax.validálás kommentárok és API-k.
Szokás szerint a cikkben szereplő fogalmak és az összes kódrészlet megvalósítása megtalálható a GitHubon.