[JAVA] ValidationMessages.properties ne doit pas être multiple sur le chemin de classe

Les messages Bean Validation (ci-après «BV») (messages par défaut fournis par des fournisseurs tels que Hibernate Validator (ci-après «HV»)) créent «ValidationMessages.properties» (fichier pour chaque langue car il s'agit d'un ensemble de ressources) directement sous le chemin de classe. Vous pouvez le changer en faisant.

Par exemple ... Lors de l'utilisation de HV comme fournisseur, les messages par défaut pour «@ Size» (annotation de contrainte fournie par VB) et «@ Length» (annotation de contrainte fournie par HV) sont les suivants.

Définition du message dans le fichier jar HV


javax.validation.constraints.Size.message = size must be between {min} and {max}
org.hibernate.validator.constraints.Length.message = length must be between {min} and {max}

Si vous souhaitez modifier ce message ...

src/main/resources/ValidationMessages.properties


javax.validation.constraints.Size.message = 'Size' must be between {min} and {max}.
org.hibernate.validator.constraints.Length.message = 'Length' must be between {min} and {max}.

Vous pouvez le changer en n'importe quel message.

Que faire si vous avez plusieurs ValidationMessages.properties?

Ensuite, quand il y a plusieurs ValidationMessages.properties ... Qu'est-ce que c'est exactement? Dans le cas où j'ai été impliqué, il y avait une situation où ValidationMessages.properties existait dans les deux modèles suivants.

La spécification BV prend-elle en charge plusieurs fichiers?

Dans la mesure où j'ai parcouru la spécification BV, plusieurs fichiers n'ont pas été mentionnés, il semble donc que la norme ne prend pas en charge plusieurs fichiers. (Puisque l'anglais est faible, il peut être lu ...)

Et s'il y en a plus d'un?

Je n'ai pas supprimé les petits mouvements, mais ... Si vous utilisez HV comme fournisseur, l'un des fichiers sera valide. Le fichier avec la priorité la plus élevée du chemin de classe sera probablement utilisé, mais si la priorité ne peut pas être explicitement spécifiée comme le fichier jar dans la bibliothèque de l'application Web (war), l'implémentation du serveur d'application, etc. Il est également prévu que les fichiers activés par changeront. ↓ En conséquence, le message qui était censé être le message spécifié pour le fichier qui n'est pas devenu valide disparaît (→ c'est-à-dire qu'il devient un bogue).

Mesures conformes aux spécifications BV

Si vous êtes particulier au sujet de la conformité des spécifications BV, supprimez ValidationMessages.properties dans la bibliothèque ou le sous-module, et contrôlez de sorte queValidationMessages.properties soit un sur le chemin de classe lorsque l'application est exécutée.

Contre-mesures utilisant les fonctions HV

Si vous n'êtes pas particulièrement attentif à la conformité aux spécifications BV et supposez que vous l'utiliserez sur + HV, [Fonction de lecture de la définition de message d'origine du mécanisme de HV](https://docs.jboss.org/hibernate/stable/validator/reference/ Vous pouvez utiliser en-US / html_single /? V = 6.0 # _constraint_definitions_via_code_serviceloader_code). Plus précisément ... Veuillez changer pour stocker ContributorValidationMessages.properties au lieu deValidationMessages.properties directement sous le fichier Jar de la bibliothèque ou du sous-module. Cela permettra au HV de lire tous les ContributorValidationMessages.properties qui existent sur le chemin de classe et de créer le message.

Si vous organisez l'ordre de priorité des définitions de message (par ordre décroissant de priorité) lorsque vous utilisez HV ...

Ce sera.

Application de vérification

Résumé

Si la bibliothèque est destinée à être utilisée sur HV, il semble préférable de définir le message par défaut dans ContributorValidationMessages.properties et de le distribuer. Même si vous l'utilisez sur un fournisseur autre que HV, cela ne devrait pas être mauvais ...

Recommended Posts

ValidationMessages.properties ne doit pas être multiple sur le chemin de classe
Map keySet, les valeurs ne doivent pas être utilisées
L'histoire que je n'ai pas pu construire après l'installation de plusieurs Java sur Windows
Utilisez des modèles sur le chemin de classe avec Apache Velocity
L'histoire selon laquelle la méthode d'initialisation de variable appelée par le constructeur Java ne doit pas être remplacée
[Android] Solution lorsque l'appareil photo ne peut pas être démarré sur Android 9
[Java] Quand var doit être utilisé et quand il ne doit pas être utilisé
L'histoire selon laquelle la mise à jour forcée n'a pas pu être mise en œuvre