Benutzerdefinierte Validierungsnachrichtenquelle im Frühjahrsstart

1. Übersicht

MessageSource ist eine leistungsstarke Funktion, die in Spring-Anwendungen verfügbar ist. Dies hilft Anwendungsentwicklern bei der Bewältigung verschiedener komplexer Szenarien, indem sie viel zusätzlichen Code schreiben, z. B. umgebungsspezifische Konfiguration, Internationalisierung oder konfigurierbare Werte.

Ein weiteres Szenario könnte darin bestehen, die Standardüberprüfungsnachrichten in benutzerfreundlichere / benutzerdefinierte Nachrichten zu ändern.

In diesem Lernprogramm erfahren Sie, wie Sie die benutzerdefinierte Validierungsnachricht MessageSource in der Anwendung mithilfe von Spring Boot konfigurieren und verwalten .

2. Maven-Abhängigkeiten

Beginnen wir mit dem Hinzufügen der erforderlichen Maven-Abhängigkeiten:

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

Die neuesten Versionen dieser Bibliotheken finden Sie in Maven Central.

3. Beispiel für eine benutzerdefinierte Validierungsnachricht

Betrachten wir ein Szenario, in dem wir eine Anwendung entwickeln müssen, die mehrere Sprachen unterstützt. Wenn der Benutzer nicht die richtigen Details als Eingabe angibt, möchten wir Fehlermeldungen entsprechend dem Gebietsschema des Benutzers anzeigen.

Nehmen wir ein Beispiel für eine Login-Formular-Bean:

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

Hier haben wir Validierungsbeschränkungen hinzugefügt, die überprüfen, ob eine E-Mail überhaupt nicht bereitgestellt wird oder bereitgestellt wird, aber nicht dem Standardstil der E-Mail-Adresse entspricht.

Um benutzerdefinierte und länderspezifische Nachrichten anzuzeigen , können wir einen Platzhalter bereitstellen, wie für die Annotation @NotEmpty angegeben .

Die Eigenschaft email.notempty wird von der MessageSource- Konfiguration aus einer Eigenschaftendatei aufgelöst .

4. Definieren der MessageSource Bean

Ein Anwendungskontext delegiert die Nachrichtenauflösung an eine Bean mit dem genauen Namen messageSource.

ReloadableResourceBundleMessageSource ist die häufigste MessageSource- Implementierung, mit der Nachrichten aus Ressourcenpaketen für verschiedene Ländereinstellungen aufgelöst werden:

@Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasename("classpath:messages"); messageSource.setDefaultEncoding("UTF-8"); return messageSource; }

Hier ist es wichtig, den Basisnamen anzugeben, da länderspezifische Dateinamen basierend auf dem angegebenen Namen aufgelöst werden.

5. Definieren von LocalValidatorFactoryBean

Um benutzerdefinierte Namensnachrichten in einer Eigenschaftendatei wie der folgenden zu verwenden, müssen Sie eine LocalValidatorFactoryBean definieren und die messageSource registrieren :

@Bean public LocalValidatorFactoryBean getValidator() { LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean(); bean.setValidationMessageSource(messageSource()); return bean; }

Beachten Sie jedoch, dass wir, wenn wir den WebMvcConfigurerAdapter bereits erweitert hätten , um zu vermeiden, dass der benutzerdefinierte Validator ignoriert wird, den Validator festlegen müssen, indem wir die Methode getValidator () aus der übergeordneten Klasse überschreiben .

Jetzt können wir eine Eigenschaftsnachricht wie folgt definieren:

" Email.notempty ="

Anstatt von

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

6. Definieren von Eigenschaftendateien

Der letzte Schritt besteht darin, eine Eigenschaftendatei im Verzeichnis src / main / resources mit dem Namen zu erstellen, der im Basisnamen in Schritt 4 angegeben ist:

# messages.properties email.notempty=Please provide valid email id.

Hier können wir gleichzeitig die Internationalisierung nutzen. Angenommen, wir möchten Nachrichten für einen französischen Benutzer in seiner Sprache anzeigen.

In diesem Fall müssen wir eine weitere Eigenschaftendatei mit dem Namen messages_fr.properties am selben Speicherort hinzufügen (überhaupt keine Codeänderungen erforderlich):

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

7. Fazit

In diesem Artikel wurde erläutert, wie die Standardüberprüfungsnachrichten geändert werden können, ohne den Code zu ändern, wenn die Konfiguration zuvor ordnungsgemäß durchgeführt wurde.

Wir können auch die Unterstützung der Internationalisierung nutzen, um die Anwendung benutzerfreundlicher zu gestalten.

Wie immer ist der vollständige Quellcode auf GitHub verfügbar.