Java Bean Validation Basics

1. Oversikt

I denne raske opplæringen dekker vi det grunnleggende om å validere en Java-bønne med standard rammeverk - JSR 380, også kjent som Bean Validation 2.0.

Validering av brukerinngang er et veldig vanlig krav i de fleste applikasjoner. Og Java Bean Validation-rammeverket har blitt de facto-standarden for å håndtere denne typen logikk.

2. JSR 380

JSR 380 er en spesifikasjon av Java API for validering av bønner, en del av Jakarta EE og JavaSE. Dette sikrer at egenskapene til en bønne oppfyller spesifikke kriterier, ved hjelp av merknader som @Ikke null, @Min, og @Max.

Denne versjonen krever Java 8 eller nyere, og utnytter nye funksjoner lagt til i Java 8, for eksempel typeannoteringer og støtte for nye typer som Valgfri og LocalDate.

For full informasjon om spesifikasjonene, les videre JSR 380.

3. Avhengigheter

Vi skal bruke et Maven-eksempel for å vise de nødvendige avhengighetene. Men selvfølgelig kan disse glassene legges på forskjellige måter.

3.1. Validerings-API

I henhold til JSR 380-spesifikasjonen, er validering-api avhengighet inneholder standard validering APIer:

 javax.validation validation-api 2.0.1.Final 

3.2. Validering API Reference Implementation

Hibernate Validator er referanseimplementeringen av validerings-API.

For å bruke den, må vi legge til følgende avhengighet:

 org.hibernate.validator hibernate-validator 6.0.13.Final 

Et raskt notat: dvalemodus er helt atskilt fra utholdenhetsaspektene ved dvalemodus. Så ved å legge det til som en avhengighet, legger vi ikke til disse utholdenhetsaspektene i prosjektet.

3.3. Avhengighet av uttrykksspråk

JSR 380 støtter variabel interpolasjon, slik at uttrykk kan oppstå i bruddmeldingene.

For å analysere disse uttrykkene, legger vi til javax.el avhengighet fra GlassFish, som inneholder en implementering av ekspresjonsspråk-spesifikasjonen:

 org.glassfish javax.el 3.0.0 

4. Bruke valideringsmerknader

Her tar vi en Bruker bean og arbeid med å legge til noen enkle valideringer til den:

importere javax.validation.constraints.AssertTrue; importere javax.validation.constraints.Max; importere javax.validation.constraints.Min; importere javax.validation.constraints.NotNull; importere javax.validation.constraints.Size; importere javax.validation.constraints.Email; offentlig klasse Bruker {@NotNull (message = "Navnet kan ikke være null") privat strengnavn; @AssertTrue privat boolsk arbeid; @Size (min = 10, max = 200, message = "Om meg må være mellom 10 og 200 tegn") privat String aboutMe; @Min (verdi = 18, melding = "Alder skal ikke være mindre enn 18") @Maks (verdi = 150, melding = "Alder skal ikke være større enn 150") privat alder; @Email (message = "E-postadressen skal være gyldig") privat streng-e-post; // standard setters og getters} 

Alle kommentarene som brukes i eksemplet er standard JSR-merknader:

  • @Ikke null bekrefter at den merkede eiendomsverdien ikke er null.
  • @AssertTrue bekrefter at den merkede eiendomsverdien er ekte.
  • @Størrelse validerer at den merkede eiendomsverdien har en størrelse mellom attributtene min og maks; kan brukes på String, Samling, Kartog matriseegenskaper.
  • @Min validerer at den merkede eiendommen har en verdi som ikke er mindre enn verdi Egenskap.
  • @Max validerer at den merkede eiendommen har en verdi som ikke er større enn verdi Egenskap.
  • @Email bekrefter at den merkede eiendommen er en gyldig e-postadresse.

Noen merknader godtar flere attributter, men beskjed attributt er felles for dem alle. Dette er meldingen som vanligvis blir gjengitt når verdien av den respektive eiendommen mislykkes validering.

Og noen ekstra merknader som du finner i JSR:

  • @Ikke tom validerer at eiendommen ikke er null eller tom; kan brukes på String, Samling, Kart eller Array verdier.
  • @NotBlank kan bare brukes på tekstverdier og validerer at eiendommen ikke er null eller mellomrom.
  • @Positive og @PositiveOrZero gjelder numeriske verdier og validere at de er strengt positive, eller positive inkludert 0.
  • @Negativ og @NegativeOrZero gjelder numeriske verdier og validere at de er strengt negative, eller negative inkludert 0.
  • @Forbi og @PastOrPresent validere at en datoverdi er i fortiden eller fortiden inkludert nåtiden; kan brukes på datatyper, inkludert de som er lagt til i Java 8.
  • @Framtid og @FutureOrPresent validere at en datoverdi er i fremtiden, eller i fremtiden inkludert nåtiden.

Valideringsnotatene kan også brukes på elementer i en samling:

Listeinnstillinger

I dette tilfellet vil enhver verdi som legges til i preferanselisten bli validert.

Også spesifikasjonen støtter det nye Valgfri type i Java 8:

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

Her vil valideringsrammeverket automatisk pakke ut LocalDate verdi og valider det.

5. Programmatisk validering

Noen rammer - som Spring - har enkle måter å utløse valideringsprosessen ved å bare bruke merknader. Dette er hovedsakelig slik at vi ikke trenger å samhandle med programmeringsvaliderings-API.

La oss nå gå den manuelle ruten og sette opp ting programmatisk:

ValidatorFactory fabrikk = Validation.buildDefaultValidatorFactory (); Validator validator = factory.getValidator (); 

For å validere en bønne trenger vi først en Validator objekt, som er bygget ved hjelp av en ValidatorFactory.

5.1. Definere Bean

Vi skal nå sette opp denne ugyldige brukeren - med en null Navn verdi:

Brukerbruker = ny bruker (); user.setWorking (true); user.setAboutMe ("Det handler om meg!"); user.setAge (50); 

5.2. Validerer bønnen

Nå som vi har en Validator, kan vi validere bønnen vår ved å sende den til validere metode.

Eventuelle brudd på begrensningene som er definert i Bruker objektet vil bli returnert som en Sett:

Sett brudd = validator.validate (bruker); 

Ved å itere over bruddene, kan vi få alle bruddmeldingene ved hjelp av getMessage metode:

for (ConstraintViolation brudd: brudd) {log.error (violation.getMessage ()); } 

I vårt eksempel (ifNameIsNull_nameValidationFails), vil settet inneholde en singel Begrensning Brudd med meldingen “Navnet kan ikke være null”.

6. Konklusjon

Denne artikkelen fokuserte på en enkel gjennomgang av standard Java Validation API. Vi viste det grunnleggende om validering av bønner ved hjelp av javax.validation merknader og API-er.

Som vanlig kan du finne en implementering av konseptene i denne artikkelen og alle kodebiter på GitHub.


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