[JAVA] ValidationMessages.properties sollte im Klassenpfad nicht mehrfach sein

Erstellen Sie für Bean Validation-Nachrichten (im Folgenden "BV") (Standardnachrichten von Anbietern wie Hibernate Validator (im Folgenden "HV")) "ValidationMessages.properties" (Datei für jede Sprache, da es sich um ein Ressourcenpaket handelt) direkt unter dem Klassenpfad. Sie können es ändern, indem Sie dies tun.

Nachrichtendefinition in der HV-JAR-Datei


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}

Wenn Sie diese Nachricht ändern möchten ...

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}.

Sie können es in eine beliebige Nachricht ändern.

Was ist, wenn Sie mehrere "ValidationMessages.properties" haben?

Wenn es dann mehrere "ValidationMessages.properties" gibt ... Was genau ist das? In dem Fall, in den ich verwickelt war, wurde eine Situation erstellt, in der "ValidationMessages.properties" in den folgenden zwei Mustern vorhanden war.

Unterstützt die BV-Spezifikation mehrere Dateien?

Soweit ich die BV-Spezifikation überflogen habe, wurden mehrere Dateien nicht erwähnt, so dass der Standard anscheinend nicht mehrere Dateien unterstützt. (Da Englisch schwach ist, kann es gelesen werden ...)

Was ist, wenn es mehr als eine gibt?

Ich habe die kleinen Bewegungen nicht unterdrückt, aber ... Wenn Sie HV als Anbieter verwenden, ist eine der Dateien gültig. Wahrscheinlich wird die Datei mit der höheren Priorität des Klassenpfads verwendet, aber wenn die Priorität nicht explizit angegeben werden kann, wie die JAR-Datei in der Bibliothek der Webanwendung (War), die Implementierung des Anwendungsservers usw. Es wird auch erwartet, dass sich die von aktivierten Dateien ändern. ↓ Infolgedessen verschwindet die erwartete Nachricht, wenn die angegebene Nachricht für die Datei angenommen wird, die nicht gültig wurde (→ das heißt, es wird ein Fehler).

Maßnahmen, die der BV-Spezifikation entsprechen

Wenn Sie sich besonders mit der Einhaltung der BV-Spezifikation befassen, löschen Sie "ValidationMessages.properties" in der Bibliothek oder im Submodul und steuern Sie, dass "ValidationMessages.properties" beim Ausführen der Anwendung im Klassenpfad angezeigt wird.

Gegenmaßnahmen mit HV-Funktionen

Wenn Sie sich nicht speziell mit der Einhaltung der BV-Spezifikationen befassen und davon ausgehen, dass Sie diese für + HV verwenden werden, Mechanismus der Lesefunktion für die ursprüngliche Nachrichtendefinition von HV Sie können en-US / html_single /? V = 6.0 verwenden (# _constraint_definitions_via_code_serviceloader_code). Insbesondere ... Bitte ändern Sie "ContributorValidationMessages.properties" anstelle von "ValidationMessages.properties" direkt unter der Jar-Datei der Bibliothek oder des Submoduls. Auf diese Weise kann die HV alle im Klassenpfad vorhandenen "ContributorValidationMessages.properties" lesen und die Nachricht erstellen.

Wenn Sie die Prioritätsreihenfolge der Nachrichtendefinitionen (in absteigender Reihenfolge der Priorität) bei Verwendung von HV organisieren ...

Es wird sein.

Verifizierungs-App

Zusammenfassung

Wenn die Bibliothek für die Verwendung in HV vorgesehen ist, ist es besser, die Standardnachricht in "ContributorValidationMessages.properties" zu definieren und zu verteilen. Selbst wenn Sie es bei einem anderen Anbieter als HV verwenden, sollte es nicht schlecht sein ...

Recommended Posts

ValidationMessages.properties sollte im Klassenpfad nicht mehrfach sein
Map keySet, Werte sollten nicht verwendet werden
Die Geschichte, die ich nach der Installation mehrerer Java unter Windows nicht erstellen konnte
Verwenden Sie Vorlagen für den Klassenpfad mit Apache Velocity
Die Geschichte, dass die vom Java-Konstruktor aufgerufene Methode zur Variableninitialisierung nicht überschrieben werden sollte
[Android] Lösung, wenn die Kamera unter Android 9 nicht gestartet werden kann
[Java] Wann var verwendet werden soll und wann nicht
Die Geschichte, dass das erzwungene Update nicht implementiert werden konnte