MessageSource de validation personnalisé au démarrage du printemps

MessageSource de validation personnalisé au démarrage du printemps

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 avec l'écriture de beaucoup de code supplémentaire, tels que 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 des messages plus conviviaux / personnalisés.

Dans ce didacticiel,we’ll see how to configure and manage custom validation MessageSource in the application using Spring Boot.

2. Dépendances 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 surMaven Central.

3. Exemple de message de validation personnalisé

Prenons un scénario dans lequel nous devons développer une application prenant en charge plusieurs langues. Si l'utilisateur ne fournit pas les informations correctes 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 spropertyemail.notempty era résolue à partir d'un fichier de propriétés par la configuration deMessageSource.

4. Defining the MessageSource  * Bean *

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

ReloadableResourceBundleMessageSource est l'implémentation deMessageSource 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 lesbasename car les noms de fichiers spécifiques aux paramètres régionaux seront résolus en fonction du nom fourni.

5. Définition LocalValidatorFactoryBean

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

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

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

Nous pouvons maintenant définir un message de propriété comme:

«email.notempty=<Custom_Message>”

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épertoiresrc/main/resources avec le nom fourni dans lesbasename à l'étape 4:

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

Ici, nous pouvons tirer parti de l’internationalisation. Supposons que nous souhaitons afficher les messages d'un utilisateur français dans sa langue.

Dans ce cas, nous devons ajouter un autre fichier de propriétés avec le nom lesmessages_fr.properties au même endroit (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 correctement effectuée 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 disponibleover on GitHub.