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.