Grundlæggende om validering af Java Bean

1. Oversigt

I denne hurtige vejledning dækker vi det grundlæggende ved validering af en Java-bønne med standardrammen - JSR 380, også kendt som Validering af bønner 2.0.

Validering af brugerinput er et super almindeligt krav i de fleste applikationer. Og Java Bean Validation Framework er blevet de facto-standarden til håndtering af denne slags logik.

2. JSR 380

JSR 380 er en specifikation af Java API til validering af bønner, en del af Jakarta EE og JavaSE. Dette sikrer, at en bønnes egenskaber opfylder specifikke kriterier ved hjælp af kommentarer som f.eks @NotNull, @Minog @Max.

Denne version kræver Java 8 eller nyere og drager fordel af nye funktioner tilføjet i Java 8, såsom typebetegnelser og support til nye typer som Valgfri og LocalDate.

For at få fuld information om specifikationerne, gå videre og læs gennem JSR 380.

3. Afhængigheder

Vi bruger et Maven-eksempel til at vise de krævede afhængigheder. Men selvfølgelig kan disse krukker tilføjes på forskellige måder.

3.1. Validerings-API

I henhold til JSR 380-specifikationen er validering-api afhængighed indeholder standardvaliderings-API'erne:

 javax.validation validation-api 2.0.1.Final 

3.2. Implementering af validering API reference

Hibernate Validator er referenceimplementeringen af ​​validerings-API'en.

For at bruge det skal vi tilføje følgende afhængighed:

 org.hibernate.validator hibernate-validator 6.0.13.Final 

En hurtig note: dvale-validator er helt adskilt fra dvaleens vedholdende aspekter. Så ved at tilføje det som en afhængighed tilføjer vi ikke disse persistensaspekter i projektet.

3.3. Afhængighed af udtrykssprog

JSR 380 understøtter variabel interpolering, der tillader udtryk inde i overtrædelsesmeddelelserne.

For at analysere disse udtryk tilføjer vi javax.el afhængighed fra GlassFish, der indeholder en implementering af ekspressionssprogspecifikationen:

 org.glassfish javax.el 3.0.0 

4. Brug af valideringsanmærkninger

Her tager vi en Bruger bønne og arbejde på at tilføje nogle enkle valideringer til det:

import javax.validation.constraints.AssertTrue; importer javax.validation.constraints.Max; importere javax.validation.constraints.Min; import javax.validation.constraints.NotNull; importer javax.validation.constraints.Size; importere javax.validation.constraints.Email; offentlig klasse Bruger {@NotNull (message = "Navn kan ikke være nul") privat Stringnavn; @AssertTrue privat boolsk arbejde; @Size (min = 10, max = 200, message = "Om mig skal være mellem 10 og 200 tegn") privat String aboutMe; @Min (værdi = 18, meddelelse = "Alder bør ikke være mindre end 18") @Max (værdi = 150, besked = "Alder bør ikke være større end 150") privat alder; @Email (message = "E-mail skal være gyldig") privat streng-e-mail; // standard settere og getters} 

Alle de kommentarer, der er brugt i eksemplet, er standard JSR-kommentarer:

  • @NotNull validerer, at den annoterede ejendomsværdi ikke er nul.
  • @AssertTrue bekræfter, at den annoterede ejendomsværdi er rigtigt.
  • @Størrelse validerer, at den annoterede egenskabsværdi har en størrelse mellem attributterne min og maks; kan anvendes på Snor, Kollektion, Kortog matrixegenskaber.
  • @Min bekræfter, at den annoterede ejendom har en værdi, der ikke er mindre end værdi attribut.
  • @Max validerer, at den annoterede ejendom har en værdi, der ikke er større end værdi attribut.
  • @E-mail validerer, at den annoterede ejendom er en gyldig e-mail-adresse.

Nogle annoteringer accepterer yderligere attributter, men besked attribut er fælles for dem alle. Dette er den meddelelse, der normalt gengives, når værdien af ​​den respektive ejendom mislykkes med validering.

Og nogle yderligere kommentarer, der kan findes i JSR:

  • @NotEmpty validerer, at ejendommen ikke er null eller tom; kan anvendes på Snor, Kollektion, Kort eller Array værdier.
  • @NotBlank kan kun anvendes på tekstværdier og validerer, at ejendommen ikke er nul eller hvid.
  • @Positiv og @PositiveOrZero gælder for numeriske værdier og validerer, at de er strengt positive eller positive inklusive 0.
  • @Negativ og @NegativeOrZero gælder for numeriske værdier og validerer, at de er strengt negative eller negative inklusive 0.
  • @Forbi og @PastOrPresent validere, at en datoværdi er i fortiden eller fortiden inklusive nutiden; kan anvendes på datatyper inklusive dem, der er tilføjet i Java 8.
  • @Fremtid og @FutureOrPresent validere, at en datoværdi er i fremtiden eller i fremtiden inklusive nutiden.

Valideringsanmærkningerne kan også anvendes på elementer i en samling:

Listepræferencer;

I dette tilfælde valideres enhver værdi, der føjes til præferencelisten.

Også specifikationen understøtter det nye Valgfri type i Java 8:

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

Her udpakkes valideringsrammen automatisk af LocalDate værdi og valider det.

5. Programmatisk validering

Nogle rammer - såsom Spring - har enkle måder at udløse valideringsprocessen ved blot at bruge annoteringer. Dette er hovedsageligt for at vi ikke behøver at interagere med den programmatiske validerings-API.

Lad os nu gå den manuelle rute og indstille tingene programmatisk:

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

For at validere en bønne har vi først brug for en Validator objekt, der er bygget ved hjælp af en ValidatorFactory.

5.1. Definition af bønnen

Vi opretter nu denne ugyldige bruger - med en null navn værdi:

Brugerbruger = ny bruger (); user.setWorking (sand); user.setAboutMe ("Det handler om mig!"); user.setAge (50); 

5.2. Bekræft bønnen

Nu hvor vi har en Validator, kan vi validere vores bønne ved at sende den til valider metode.

Enhver overtrædelse af de begrænsninger, der er defineret i Bruger objekt returneres som en Sæt:

Sæt overtrædelser = validator.validate (bruger); 

Ved at gentage overtrædelserne kan vi få alle meddelelser om overtrædelse ved hjælp af getMessage metode:

for (ConstraintViolation overtrædelse: overtrædelser) {log.error (violation.getMessage ()); } 

I vores eksempel (ifNameIsNull_nameValidationFails), ville sættet indeholde en enkelt Begrænsning Overtrædelse med meddelelsen "Navn kan ikke være nul".

6. Konklusion

Denne artikel fokuserede på en simpel gennemgang af standard Java Validation API. Vi viste det grundlæggende i validering af bønner ved hjælp af javax.validation annoteringer og API'er.

Som sædvanlig kan en implementering af begreberne i denne artikel og alle kodestykker findes på GitHub.