MessageSource de validation personnalisé dans Spring Boot

1. Vue d'ensemble

MessageSource est une fonctionnalité puissante disponible dans les applications Spring. Cela aide les développeurs d'applications à gérer divers scénarios complexes en écrivant beaucoup de code supplémentaire, comme la configuration spécifique à l'environnement, l'internationalisation ou les valeurs configurables.

Un autre scénario pourrait être de modifier les messages de validation par défaut en messages plus conviviaux / personnalisés.

Dans ce didacticiel, nous verrons comment configurer et gérer la validation personnalisée MessageSource dans l'application à l'aide de Spring Boot .

2. Dépendances de Maven

Commençons par ajouter les dépendances Maven nécessaires:

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

Vous pouvez trouver les dernières versions de ces bibliothèques sur Maven Central.

3. Exemple de message de validation personnalisé

Prenons un scénario où nous devons développer une application qui prend en charge plusieurs langues. Si l'utilisateur ne fournit pas les détails corrects en entrée, nous aimerions afficher les messages d'erreur en fonction des paramètres régionaux de l'utilisateur.

Prenons un exemple de bean de formulaire de connexion:

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

Ici, nous avons ajouté des contraintes de validation qui vérifient si un e-mail n'est pas du tout fourni ou fourni, mais ne suit pas le style d'adresse e-mail standard.

Pour afficher un message personnalisé et spécifique aux paramètres régionaux, nous pouvons fournir un espace réservé comme mentionné pour l' annotation @NotEmpty .

La propriété email.notempty sera résolue à partir d'un fichier de propriétés par la configuration MessageSource .

4. Définition du bean MessageSource

Un contexte d'application délègue la résolution de message à un bean avec le nom exact messageSource.

ReloadableResourceBundleMessageSource est l' implémentation MessageSource la plus courante qui résout les messages des ensembles de ressources pour différents paramètres régionaux:

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

Ici, il est important de fournir le nom de base car les noms de fichiers spécifiques aux paramètres régionaux seront résolus en fonction du nom fourni.

5. Définition de LocalValidatorFactoryBean

Pour utiliser des messages de nom personnalisés dans un fichier de propriétés comme nous devons définir un LocalValidatorFactoryBean et enregistrer le messageSource:

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

Cependant, notez que si nous avions déjà étendu WebMvcConfigurerAdapter , pour éviter que le validateur personnalisé ne soit ignoré, nous devions définir le validateur en remplaçant la méthode getValidator () de la classe parente.

Maintenant, nous pouvons définir un message de propriété comme:

" Email.notempty ="

au lieu de

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

6. Définition des fichiers de propriétés

La dernière étape consiste à créer un fichier de propriétés dans le répertoire src / main / resources avec le nom fourni dans le nom de base à l'étape 4:

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

Ici, nous pouvons profiter de l'internationalisation avec cela. Disons que nous voulons afficher les messages d'un utilisateur français dans sa langue.

Dans ce cas, nous devons ajouter un fichier de propriétés supplémentaire avec le nom messages_fr.properties au même emplacement (aucun changement de code requis):

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

7. Conclusion

Dans cet article, nous avons expliqué comment les messages de validation par défaut peuvent être modifiés sans modifier le code si la configuration est effectuée correctement au préalable.

Nous pouvons également tirer parti du soutien de l'internationalisation pour rendre l'application plus conviviale.

Comme toujours, le code source complet est disponible à l'adresse over sur GitHub.