Custom Validation MessageSource i Spring Boot

1. Oversigt

MessageSource er en kraftfuld funktion tilgængelig i Spring applikationer. Dette hjælper applikationsudviklere med at håndtere forskellige komplekse scenarier med at skrive meget ekstra kode, såsom miljøspecifik konfiguration, internationalisering eller konfigurerbare værdier.

Et andet scenarie kan være at ændre standardvalideringsmeddelelserne til mere brugervenlige / tilpassede meddelelser.

I denne vejledning vi ser, hvordan vi konfigurerer og administrerer brugerdefineret validering MessageSource i applikationen ved hjælp af Spring Boot.

2. Maven-afhængigheder

Lad os starte med at tilføje de nødvendige Maven-afhængigheder:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-validering 

Du kan finde de nyeste versioner af disse biblioteker på Maven Central.

3. Eksempel på meddelelse om brugerdefineret validering

Lad os overveje et scenarie, hvor vi skal udvikle en applikation, der understøtter flere sprog. Hvis brugeren ikke angiver de korrekte detaljer som input, vil vi gerne vise fejlmeddelelser i henhold til brugerens lokalitet.

Lad os tage et eksempel på en Login form bønne:

public class LoginForm {@NotEmpty (message = "{email.notempty}") @Email private String email; @NotNull privat strengadgangskode; // standard getter og setters}

Her har vi tilføjet valideringsbegrænsninger, der verificerer, om en e-mail ikke overhovedet er angivet eller angivet, men ikke følger den standard e-mail-adressestil.

For at vise tilpasset og landespecifik besked kan vi give en pladsholder som nævnt til @NotEmpty kommentar.

Det e-mail. ikke frit ejendom løses fra en egenskabsfiler af MessageSource konfiguration.

4. Definition af MessageSource Bønne

En applikationskontekst delegerer beskedopløsningen til en bønne med det nøjagtige navn messageSource.

ReloadableResourceBundleMessageSource er den mest almindelige MessageSource implementering, der løser beskeder fra ressourcebundter til forskellige lokaliteter:

@Bean offentlig MessageSource messageSource () {ReloadableResourceBundleMessageSource messageSource = ny ReloadableResourceBundleMessageSource (); messageSource.setBasename ("classpath: messages"); messageSource.setDefaultEncoding ("UTF-8"); returnere beskedKilde; }

Her er det vigtigt at give basenavn da landespecifikke filnavne løses baseret på det angivne navn.

5. Definition LocalValidatorFactoryBean

For at bruge brugerdefinerede navnebeskeder i en egenskabsfil, skal vi definere en LocalValidatorFactoryBean og registrer beskedKilde:

@Bean public LocalValidatorFactoryBean getValidator () {LocalValidatorFactoryBean bean = ny LocalValidatorFactoryBean (); bean.setValidationMessageSource (messageSource ()); retur bønne; }

Bemærk dog, at hvis vi allerede havde udvidet WebMvcConfigurerAdapterFor at undgå at ignorere den brugerdefinerede validator, bliver vi nødt til at indstille validatoren ved at tilsidesætte getValidator () metode fra forældreklassen.

Nu kan vi definere en egenskabsbesked som:

email.notempty = ”

i stedet for

“Javax.validation.constraints.NotEmpty.message =”

6. Definition af ejendomsfiler

Det sidste trin er at oprette en egenskabsfil i src / main / ressourcer mappe med navnet i basenavn i trin 4:

# messages.properties email.notempty = Angiv gyldigt e-mail-id.

Her kan vi drage fordel af internationalisering sammen med dette. Lad os sige, at vi vil vise meddelelser til en fransk bruger på deres sprog.

I dette tilfælde er vi nødt til at tilføje endnu en egenskabsfil med navnet the beskeder_fr.egenskaber på samme sted (ingen kodeændringer kræves overhovedet):

# messages_fr.properties email.notempty = Veuillez fournir un identifiant de messagerie valide.

7. Konklusion

I denne artikel dækkede vi, hvordan standardvalideringsmeddelelserne kan ændres uden at ændre koden, hvis konfigurationen foregår korrekt på forhånd.

Vi kan også udnytte understøttelsen af ​​internationalisering sammen med dette for at gøre applikationen mere brugervenlig.

Som altid er den fulde kildekode tilgængelig på GitHub.


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