Hibernált Validator-specifikus korlátozások

1. Áttekintés

Ebben az oktatóanyagban áttekintjük a Hibernate Validator korlátozásait, amelyek a Hibernate Validatorba vannak beépítve, de kívül esnek a Bean Validation specifikáción.

A babellenőrzés összefoglalását lásd a Java babellenőrzés alapjairól szóló cikkünkben.

2. A hibernált Validator beállítása

Legalábbis, hozzá kell adnunk a Hibernate Validator függőségeinkhez:

 org.hibernate.validator hibernate-validator 6.0.16.Final 

Ne feledje, hogy a Hibernate Validator nem függ a Hibernate-től, az ORM-től, amellyel számos más cikkben foglalkozunk.

Ezenkívül néhány bevezetett jegyzet csak akkor érvényes, ha projektünk bizonyos könyvtárakat használ. Tehát mindegyiknél feltüntetjük a szükséges függőségeket.

3. Pénzzel kapcsolatos értékek érvényesítése

3.1. Hitelkártyaszámok érvényesítése

Az érvényes hitelkártyaszámoknak meg kell felelniük az ellenőrző összegnek, amelyet a Luhn-algoritmus segítségével számolunk ki. A @Bankkártya száma a kényszer akkor sikerül, amikor a karakterlánc kielégíti az ellenőrző összeget.

@Bankkártya száma nem végez más ellenőrzést a bemeneti karakterláncon. Különösen nem ellenőrzi a bemenet hosszát. Ezért csak olyan számokat képes felismerni, amelyek egy kis elírás miatt érvénytelenek.

Ne feledje, hogy a korlátozás alapértelmezés szerint kudarcot vall, ha a karakterlánc nem számjegyű karaktereket tartalmaz, de mondhatjuk neki, hogy figyelmen kívül hagyja őket:

@CreditCardNumber (ignoreNonDigitCharacters = true) private String lenientCreditCardNumber;

Ezután felvehetünk olyan karaktereket, mint szóköz vagy kötőjel:

validations.setLenientCreditCardNumber ("7992-7398-713"); constraintViolations = validator.validateProperty (érvényesítések, "lenientCreditCardNumber"); assertTrue (kényszerViolations.isEmpty ());

3.2. A monetáris értékek érvényesítése

A @Valuta az érvényesítő ellenőrzi, hogy egy adott pénzösszeg a megadott pénznemben van-e:

@Currency ("EUR") privát MonetaryAmount egyenleg;

Osztály MonetaryAmount a Java Money része. Ebből kifolyólag, @Valuta csak akkor érvényes, ha elérhető a Java Money implementáció.

Miután helyesen beállítottuk a Java Money-t, ellenőrizhetjük a korlátozást:

bean.setBalance (Money.of (új BigDecimal (100.0), Monetary.getCurrency ("EUR"))); constraintViolations = validator.validateProperty (bab, "egyensúly"); assertEquals (0, constraintViolations.size ());

4. A tartományok érvényesítése

4.1. Numerikus és monetáris tartományok

A babellenőrzés specifikációja számos korlátozást határoz meg, amelyeket érvényesíthetünk a numerikus mezőkön. Ezek mellett a Hibernate Validator praktikus feljegyzéssel szolgál, @Hatótávolság, azt kombinációjaként működik @Min és @Max,egy tartomány beillesztése:

@ Tartomány (min = 0, max = 100) privát BigDecimal százalék;

Mint @Min és @Max, @Hatótávolság a primitív számtípusok mezőire és azok burkolóira alkalmazható; BigInteger és BigDecimal, Húr a fentiek ábrázolása, és végül Pénzbeli érték mezők.

4.2. Az időtartam

A Hibernate Validator a JSR 380 szabványos kommentárjain kívül az idõpontokat jelentõ értékekhez tartalmaz korlátozásokat a Időtartams ugyanúgy. Ügyeljen arra, hogy megnézze a Időszak és Időtartam először a Java Time osztályok.

Így, minimális és maximális időtartamot érvényesíthetünk egy ingatlanon:

@DurationMin (nap = 1, óra = 2) @ DurationMax (nap = 2, óra = 1) privát Időtartam;

Még ha itt sem is mutattuk meg mindet, az annotációnak paraméterei vannak az összes időegységre, a nanoszekundumoktól a napokig.

Felhívjuk figyelmét, hogy alapértelmezés szerint a minimum és maximum értékek magukban foglalják. Vagyis egy olyan érték, amely pontosan megegyezik a minimummal vagy a maximummal, átmegy az érvényesítésen.

Ha azt akarjuk, hogy a határértékek érvénytelenek legyenek, akkor megadjuk a befogadó tulajdonság hamis:

@DurationMax (perc = 30, beleértve = hamis)

5. Húrok érvényesítése

5.1. Karakterlánc hossza

Két kissé eltérő korlátozást alkalmazhatunk arra, hogy a karakterlánc bizonyos hosszúságú legyen.

Általában biztosítani akarjuk a karakterlánc hosszát karakterekben - azt, amelyet a hossz módszer - minimum és maximum között van. Ebben az esetben használjuk @Hossz karakterlánc tulajdonságán vagy mezőjén:

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

Az Unicode bonyolultsága miatt azonban néha a karakteres hosszúság és a kódpontokban megadott hossz eltér. Amikor az utóbbit akarjuk ellenőrizni, akkor használjuk @CodePointLength:

@CodePointLength (min = 1, max = 3) privát karakterlánc someString;

Például az „aa \ uD835 \ uDD0A” karaktersorozat 4 karakter hosszú, de csak 3 kódpontot tartalmaz, így az első korlátozást kudarcot vallja, a másodikat pedig átengedi.

Ezenkívül mindkét megjegyzéssel elhagyhatjuk a minimum vagy a maximum értéket.

5.2. A számjegyek karakterláncainak ellenőrzése

Már láttuk, hogyan lehet ellenőrizni, hogy a karakterlánc érvényes hitelkártyaszám. A Hibernate Validator azonban számos más korlátozást tartalmaz a számjegyek karakterláncaira vonatkozóan.

Az első, amelyet átnézünk, az @LuhnCheck. Ez a @Bankkártya száma, abban ugyanazt az ellenőrzést hajtja végre, de további paramétereket tesz lehetővé:

@LuhnCheck (startIndex = 0, endIndex = Integer.MAX_VALUE, checkDigitIndex = -1) privát karakterlánc someString;

Itt bemutattuk a paraméterek alapértelmezett értékeit, így a fentiek egyenértékűek egy egyszerűvel @LuhnCheck annotáció.

De, mint láthatjuk, elvégezhetjük az ellenőrzést egy szubstringen (startIndex és endIndex), és mondja meg a megszorításnak, hogy melyik számjegy az ellenőrző összeg számjegye, -1 jelentése az utolsó az ellenőrzött részstringben.

További érdekes korlátok közé tartozik a modulo 10 check (@ Mod10Check) és a modulo 11 ellenőrzés (@ Mod11Check), amelyeket általában vonalkódokhoz és más kódokhoz, például ISBN-hez használnak.

Azonban ezekben a speciális esetekben a Hibernate Validator véletlenül korlátozást nyújt az ISBN-kódok érvényesítésére, @ISBN, valamint egy @EAN korlátozás az EAN vonalkódok számára.

5.3. URL és HTML ellenőrzés

A @Url a kényszer ellenőrzi, hogy a karakterlánc az URL érvényes reprezentációja. Ezenkívül ellenőrizhetjük, hogy az URL adott összetevője rendelkezik-e bizonyos értékkel:

@URL (protokoll = "https") privát karakterlánc URL;

Így ellenőrizhetjük a protokollt, a gazdagépet és a portot. Ha ez nem elegendő, van egy regexp tulajdonság, amelyet felhasználhatunk az URL és egy reguláris kifejezés összehangolásához.

Azt is ellenőrizhetjük, hogy egy tulajdonság „biztonságos” HTML-kódot tartalmaz-e (például szkriptcímkék nélkül):

@SafeHtml private String html;

@SafeHtml a JSoup könyvtárat használja, amelyet fel kell venni a függőségeinkbe.

A HTML-fertőtlenítést az igényeinkhez szabhatjuk beépített címkefehér listák (a engedélyezőlista tulajdonság a megjegyzésben), és további címkéket és attribútumokat ( additionalTags és additionalTagsWithAttributes paraméterek).

6. Egyéb korlátozások

Röviden említsük meg, hogy a Hibernate Validator tartalmaz néhány ország- és területspecifikus korlátozást, különösen néhány brazil és lengyel azonosító számra, adófizetői kódra és hasonlóra. A teljes listát a dokumentáció vonatkozó szakaszában találja.

Azt is ellenőrizhetjük, hogy egy gyűjtemény nem tartalmaz-e másolatot a @UniqueElements.

Végül, olyan összetett esetekre, amelyekre a meglévő kommentárok nem terjednek ki, meghívhatunk egy JSR-223 kompatibilis szkript motorban írt szkriptet. Természetesen megérintettük a JSR-223-at a Nashornról szóló cikkünkben, a modern JVM-ekbe beépített JavaScript-implementációban.

Ebben az esetben az annotáció osztályszintű, és a parancsfájl az egész példányon meghívásra kerül, mint változó _ez:

@ScriptAssert (lang = "nashorn", script = "_this.valid") public class AdditionalValidations {privát logikai érték érvényes = true; // szabványos mérőeszközök és beállítók}

Ezután ellenőrizhetjük a korlátozást az egész példányon:

bab.setValid (hamis); constraintViolations = validator.validate (bab); assertEquals (1, constraintViolations.size ());

7. Következtetés

Ebben a cikkben felsoroltuk azokat a korlátozásokat a Hibernate Validator programban, amelyek meghaladják a babellenőrzés specifikációjában meghatározott minimális halmazt.

Ezen példák és kódrészletek megvalósítása megtalálható a GitHub-on.


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