Špecifické obmedzenia overovacieho modulu dlhodobého spánku

1. Prehľad

V tomto tutoriáli sa chystáme preskúmať obmedzenia Hibernate Validator, ktoré sú zabudované do Hibernate Validator, ale sú mimo špecifikácie Bean Validation.

Rekapituláciu overenia Bean nájdete v našom článku Základy overenia Java Bean.

2. Nastavenie režimu dlhodobého spánku

Prinajmenšom, mali by sme pridať Hibernate Validator do našich závislostí:

 org.hibernate.validator hibernate-validator 6.0.16.Final 

Upozorňujeme, že program Hibernate Validator nezávisí od režimu dlhodobého spánku, ORM, ktorému sme sa venovali v mnohých ďalších článkoch.

Niektoré z anotácií, ktoré zavedieme, sa navyše použijú, iba ak náš projekt využíva určité knižnice. Takže pre každú z nich uvedieme potrebné závislosti.

3. Validácia hodnôt súvisiacich s peniazmi

3.1. Overovanie čísel kreditných kariet

Platné čísla kreditných kariet musia vyhovovať kontrolnému súčtu, ktorý vypočítame pomocou Luhnovho algoritmu. The @Číslo kreditnej karty obmedzenie je úspešné, keď a reťazec vyhovuje kontrolnému súčtu.

@Číslo kreditnej karty nevykonáva inú kontrolu vstupného reťazca. Nekontroluje najmä dĺžku vstupu. Preto dokáže zistiť iba čísla, ktoré sú neplatné kvôli malému preklepu.

Upozorňujeme, že v predvolenom nastavení obmedzenie zlyhá, ak reťazec obsahuje znaky, ktoré nie sú číslicami, ale môžeme povedať, že ich bude ignorovať:

@CreditCardNumber (ignoreNonDigitCharacters = true) private String lenientCreditCardNumber;

Potom môžeme zahrnúť znaky, ako sú medzery alebo pomlčky:

validations.setLenientCreditCardNumber ("7992-7398-713"); constraintViolations = validator.validateProperty (validácie, "lenientCreditCardNumber"); assertTrue (constraintViolations.isEmpty ());

3.2. Validácia peňažných hodnôt

The @ Mena validátor skontroluje, či je daná peňažná čiastka v zadanej mene:

@ Mena („EUR“) súkromný zostatok MonetaryAmount;

Trieda MonetaryAmount je súčasťou Java Money. Preto @ Mena platí iba vtedy, keď je k dispozícii implementácia Java Money.

Po správnom nastavení Java Money môžeme skontrolovať obmedzenie:

bean.setBalance (Money.of (nový BigDecimal (100,0), Monetary.getCurrency ("EUR"))); constraintViolations = validator.validateProperty (fazuľa, "zostatok"); assertEquals (0, constraintViolations.size ());

4. Validácia rozsahov

4.1. Číselné a menové rozsahy

Špecifikácia overenia fazule definuje niekoľko obmedzení, ktoré môžeme vynútiť v číselných poliach. Okrem toho poskytuje Hibernate Validator užitočnú anotáciu, @ Rozsah, že pôsobí ako kombinácia @ Min a @Max,zodpovedajúce rozsahu vrátane:

@Range (min = 0, max = 100) súkromné ​​BigDecimal percent;

Páči sa mi to @ Min a @ Max, @ Rozsah je použiteľné na poliach typov primitívnych čísel a ich obaloch; BigInteger a BigDecimal, String reprezentácie vyššie uvedeného a nakoniec MonetaryValue polia.

4.2. Trvanie času

Okrem štandardných anotácií JSR 380 pre hodnoty, ktoré predstavujú časové body, obsahuje program Hibernate Validator obmedzenia pre Trvanies rovnako. Nezabudnite sa pozrieť na Obdobie a Trvanie triedy Java Time ako prvé.

Takže môžeme vynútiť minimálne a maximálne trvanie vlastnosti:

@DurationMin (dni = 1, hodiny = 2) @DurationMax (dni = 2, hodiny = 1) súkromné ​​trvanie;

Aj keby sme ich tu všetky neukázali, anotácia má parametre pre všetky časové jednotky od nanosekúnd po dni.

Upozorňujeme, že v predvolenom nastavení minimálne a maximálne hodnoty sú vrátane. To znamená, že hodnota, ktorá je úplne rovnaká ako minimum alebo maximum, prejde validáciou.

Ak chceme, aby boli hraničné hodnoty neplatné, definujeme namiesto toho vrátane vlastnosť, ktorá má byť nepravdivá:

@DurationMax (minúty = 30, vrátane = false)

5. Validácia reťazcov

5.1. Dĺžka reťazca

Na vynútenie určitej dĺžky reťazca môžeme použiť dve mierne odlišné obmedzenia.

Spravidla chceme zabezpečiť dĺžku reťazca v znakoch - ten, ktorý meriame pomocou dĺžka metóda - je medzi minimom a maximom. V takom prípade použijeme @ Dĺžka na vlastnosti alebo poli reťazca:

@ Dĺžka (min = 1, max = 3) private String someString;

Avšak kvôli zložitosti Unicode sa niekedy dĺžka znakov a dĺžka kódových bodov líšia. Keď to chceme skontrolovať, použijeme @CodePointLength:

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

Napríklad reťazec „aa \ uD835 \ uDD0A“ má 4 znaky, ale obsahuje iba 3 body kódu, takže prvé obmedzenie zlyhá a vyhovuje druhému.

Pri obidvoch anotáciách tiež môžeme vynechať minimálnu alebo maximálnu hodnotu.

5.2. Kontroly reťazcov číslic

Už sme videli, ako skontrolovať, či je reťazec platné číslo kreditnej karty. Program Hibernate Validator však obsahuje niekoľko ďalších obmedzení pre reťazce číslic.

Prvý, ktorý recenzujeme, je @LuhnCheck. Toto je zovšeobecnená verzia servera @Číslo kreditnej karty, v tom vykonáva rovnakú kontrolu, ale umožňuje ďalšie parametre:

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

Tu sme zobrazili predvolené hodnoty parametrov, takže vyššie uvedené je ekvivalentné jednoduchému @LuhnCheck anotácia.

Ako však vidíme, môžeme vykonať kontrolu na podreťazci (startIndex a endIndex) a povedzte obmedzenia, ktorá číslica je číslica kontrolného súčtu, pričom -1 znamená poslednú v kontrolovanom podreťazci.

Medzi ďalšie zaujímavé obmedzenia patrí kontrola modulo 10 (@ Mod10Check) a kontrola modulo 11 (@ Mod11Check), ktoré sa zvyčajne používajú pre čiarové kódy a iné kódy, ako je ISBN.

V týchto konkrétnych prípadoch však program Hibernate Validator predstavuje obmedzenie pri overovaní kódov ISBN, @ISBN, ako aj @EAN obmedzenia pre čiarové kódy EAN.

5.3. Validácia URL a HTML

The @Url obmedzenia overuje, či je reťazec platnou reprezentáciou adresy URL. Ďalej môžeme skontrolovať, či konkrétna súčasť adresy URL má určitú hodnotu:

@URL (protokol = "https") súkromná adresa URL reťazca;

Môžeme tak skontrolovať protokol, hostiteľa a port. Ak to nestačí, je tu a regexp vlastnosť, ktorú môžeme použiť na priradenie adresy URL k regulárnemu výrazu.

Môžeme tiež overiť, či vlastníctvo obsahuje „bezpečný“ kód HTML (napríklad bez značiek skriptov):

@SafeHtml súkromný reťazec html;

@SafeHtml používa knižnicu JSoup, ktorá musí byť zahrnutá v našich závislostiach.

Sanitizáciu HTML môžeme prispôsobiť našim potrebám pomocou vstavaných povolených značiek („ biela listina vlastnosť anotácie) a vrátane ďalších značiek a atribútov ( additionalTags a additionalTagsWithAttributes parametre).

6. Ďalšie obmedzenia

Krátko spomeňme, že program Hibernate Validator obsahuje určité obmedzenia špecifické pre jednotlivé krajiny a miestne nastavenia, najmä pre niektoré brazílske a poľské identifikačné čísla, kódy daňových poplatníkov a podobne. Celý zoznam nájdete v príslušnej časti dokumentácie.

Tiež môžeme skontrolovať, či kolekcia neobsahuje duplikáty s @UniqueElements.

Nakoniec, v zložitých prípadoch, ktoré nie sú pokryté existujúcimi anotáciami, môžeme vyvolať skript napísaný v skriptovacom stroji kompatibilnom s JSR-223. Samozrejme sme sa dotkli JSR-223 v našom článku o Nashorne, implementácii JavaScriptu zahrnutej v moderných JVM.

V tomto prípade je anotácia na úrovni triedy a skript je vyvolaný v celej inštancii a odovzdaný ako premenná _to:

@ScriptAssert (lang = "nashorn", script = "_this.valid") verejná trieda AdditionalValidations {private boolean valid = true; // štandardné getre a setre}

Potom môžeme skontrolovať obmedzenie celej inštancie:

bean.setValid (false); constraintViolations = validator.validate (fazuľa); assertEquals (1, constraintViolations.size ());

7. Záver

V tomto článku sme uviedli obmedzenia v Hibernate Validator, ktoré idú nad minimálnu množinu definovanú v špecifikácii overenia fazule.

Implementáciu všetkých týchto príkladov a útržkov kódu nájdete na GitHub.


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