Ich versuche derzeit, eine benutzerdefinierte Validierungsnachricht mithilfe der Bean-Validierung bereitzustellen.
Derzeit wird die Version 3.1.4 von Spring mvc verwendet, um die Apache-Bean zu validieren.
In meiner Bean spezifiziere ich:
%Vor%Und in meinen messages.properties:
%Vor%Aus dem Experiment habe ich Folgendes herausgefunden:
und es wird als The title must not be empty and must not exceed 50 characters.
angezeigt, was korrekt ist.
Aber all das sind Experimente. Ich frage mich, ob es Dokumentationen gibt, die die Reihenfolge der Parameter für die Standardbedingungen angeben ?
Ich habe versucht, hoffentlich Size.addForm.title=The title must not be empty and must not exceed {max} characters.
basierend auf der Standard ValidationMessages.properties zu verwenden, aber endet mit NumberFormatException auf dem {max}
. Ich denke, es hat etwas mit den Interpolationen zu tun?
Somit scheitert jeder von diesen unabhängig mit NumberFormatException auf dem {max}
:
Dies ist der Stacktrace:
%Vor%Dies ist die einzige, der mit dem benannten Parameter funktioniert, ist es hat ValidationMessages.properties sein, und es hat genau der Schlüssel sein, die von der JSR 303 Implementierung in dem Standard-Ressourcenpaket existiert :
Grundsätzlich ist die aktuelle Schlussfolgerung, dass ich standardmäßig keine benannten Parameter für meine spezifischen Nachrichten verwenden kann. Der benannte Parameter funktioniert nur , wenn i außer Kraft setzen, die genauen Schlüssel auf dem Standard jsr303 Resource & amp; & amp; , wenn ich die gleiche Standard jsr303 verwenden Resourcedatei Name, der ValidationMessages.properties
istIch bevorzuge zu vermeiden, dass ich mit Interpolation spielen muss, daher die ursprüngliche Frage, wie man herausfinden kann, dass {0} oder {1} oder {2} sich auf das in der Dokumentation bezieht.
Spezifikation JSR 303 , 4.3.1.1. "Default message interpolation algorithm"
- 4 - Nachrichtenparameter werden aus der Nachrichtenzeichenfolge extrahiert. Diejenigen, die mit dem Namen eines Attributs der constraint wird durch den Wert dieses Attributs in der Constraint-Deklaration ersetzt.
Ich lese das so: Sie sollten den Namen der Annotationseigenschaften für den Nachrichtenparameter anstelle von Zahlen verwenden.
Anhang B "Standard ResourceBundle-Nachrichten" der Spezifikation zeigt einige Beispiele:
%Vor% So scheint es, dass benannte Parameterer die Art sind, die Sie verwenden sollten. (Dass {0}
, {1}
und {2}
auch funktioniert, scheint ein Implementierungs "Feature" zu sein) - Aber am Ende ist dies nur das Verhalten des Standard-Nachrichteninterpolators, der Standard definiert einen Weg wie man sie durch eigene ersetzt.
Aktualisieren
Die Hibernate Validation-Implementierung scheint eine zusätzliche Funktion zu haben, um die Werte ${validatedValue:<format>}
zu formatieren. - Vielleicht hilft dir das mit deinem java.lang.NumberFormatException
@Siehe Hibernate Validator Reference , Kapitel 5.3. MessageInterpolator
Size.foo.bar
interpolation mit Namen funktioniert nicht size.foo.bar
und baz.foo.bar
(wenn der Name der Validierungsanmerkung nicht verwendet wird; die Groß- und Kleinschreibung wird berücksichtigt) Wird mit message.properties
Datei überprüft, die in WebAppConfig
hinzugefügt wird. extending WebMvcConfigurerAdapter
like:
Tags und Links java spring spring-mvc internationalization bean-validation