Aangepaste validatie MessageSource in Spring Boot

1. Overzicht

MessageSource is een krachtige functie die beschikbaar is in Spring-toepassingen. Dit helpt applicatieontwikkelaars om met verschillende complexe scenario's om te gaan met het schrijven van veel extra code, zoals omgevingsspecifieke configuratie, internationalisering of configureerbare waarden.

Een ander scenario zou kunnen zijn het wijzigen van de standaardvalidatieberichten naar gebruikersvriendelijkere / aangepaste berichten.

In deze tutorial we zullen zien hoe we aangepaste validatie kunnen configureren en beheren MessageSource in de applicatie met Spring Boot.

2. Maven afhankelijkheden

Laten we beginnen met het toevoegen van de nodige Maven-afhankelijkheden:

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

U kunt de nieuwste versies van deze bibliotheken vinden op Maven Central.

3. Voorbeeld van een aangepast validatiebericht

Laten we eens kijken naar een scenario waarin we een applicatie moeten ontwikkelen die meerdere talen ondersteunt. Als de gebruiker niet de juiste gegevens invoert, willen we foutmeldingen weergeven volgens de landinstellingen van de gebruiker.

Laten we een voorbeeld nemen van een inlogformulier bean:

openbare klasse LoginForm {@NotEmpty (message = "{email.notempty}") @Email privé String e-mail; @NotNull privé String-wachtwoord; // standaard getter en setters}

Hier hebben we validatiebeperkingen toegevoegd die controleren of een e-mail helemaal niet wordt verstrekt, maar niet de standaard e-mailadresstijl volgt.

Om een ​​aangepast en landspecifiek bericht weer te geven, kunnen we een tijdelijke aanduiding opgeven zoals vermeld voor de @Niet leeg annotatie.

De email.notempty eigenschap zal worden omgezet uit een eigenschappenbestanden door de MessageSource configuratie.

4. Het definiëren van het MessageSource Boon

Een toepassingscontext delegeert de berichtresolutie naar een bean met de exacte naam messageSource.

HerlaadbareResourceBundleMessageSource is de meest voorkomende MessageSource implementatie die berichten van bronbundels voor verschillende landinstellingen oplost:

@Bean openbare MessageSource messageSource () {ReloadableResourceBundleMessageSource messageSource = nieuwe ReloadableResourceBundleMessageSource (); messageSource.setBasename ("classpath: messages"); messageSource.setDefaultEncoding ("UTF-8"); terug messageSource; }

Hier is het belangrijk om het basisnaam aangezien locale-specifieke bestandsnamen worden omgezet op basis van de opgegeven naam.

5. Definiëren LocalValidatorFactoryBean

Om aangepaste naamberichten in een eigenschappenbestand te gebruiken, moeten we een LocalValidatorFactoryBean en registreer het bericht Bron:

@Bean openbaar LocalValidatorFactoryBean getValidator () {LocalValidatorFactoryBean bean = nieuwe LocalValidatorFactoryBean (); bean.setValidationMessageSource (messageSource ()); terugkeer boon; }

Houd er echter rekening mee dat als we de WebMvcConfigurerAdapter, om te voorkomen dat de aangepaste validator wordt genegeerd, moeten we de validator instellen door de getValidator () methode uit de bovenliggende klasse.

Nu kunnen we een eigenschapbericht definiëren zoals:

email.notempty = ”

in plaats van

"Javax.validation.constraints.NotEmpty.message ="

6. Eigenschappenbestanden definiëren

De laatste stap is het maken van een eigenschappenbestand in het src / main / resources directory met de naam die is opgegeven in het basisnaam in stap 4:

# messages.properties email.notempty = Geef een geldig e-mailadres op.

Hierbij kunnen we profiteren van internationalisering. Stel dat we berichten voor een Franse gebruiker in hun taal willen weergeven.

In dit geval moeten we nog een eigenschappenbestand toevoegen met de naam de messages_fr.properties op dezelfde locatie (helemaal geen codewijzigingen vereist):

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

7. Conclusie

In dit artikel hebben we besproken hoe de standaardvalidatieberichten kunnen worden gewijzigd zonder de code te wijzigen als de configuratie vooraf correct is uitgevoerd.

We kunnen hierbij ook gebruikmaken van de ondersteuning van internationalisering om de applicatie gebruiksvriendelijker te maken.

Zoals altijd is de volledige broncode beschikbaar op GitHub.