Die Reihenfolge der Standardparameter für die Bean-Validierung?

8

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:

  • {0} bezieht sich auf 'title'
  • {1} bezieht sich auf das Maximum, welches 50
  • ist
  • {2} bezieht sich auf die min, die 1
  • ist

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?

Aktualisieren

Somit scheitert jeder von diesen unabhängig mit NumberFormatException auf dem {max} :

  • messages.properties : Size.addForm.title = Der Titel darf nicht leer sein und darf nicht mehr als {max} Zeichen
  • .
  • messages.properties : Size = Der Titel darf nicht leer sein und darf {max} Zeichen nicht überschreiten.
  • messages.properties . Javax.validation.constraints.Size.message = Der Titel darf nicht leer sein und darf nicht mehr als {max} Zeichen
  • ValidationMessages.properties : Size.addForm.title = Der Titel darf nicht leer sein und darf nicht mehr als {max} Zeichen
  • .
  • ValidationMessages.properties : Size = Der Titel darf nicht leer sein und darf {max} Zeichen nicht überschreiten.

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 :

  • ValidationMessages.properties : javax.validation.constraints.Size.message = Sie wad wissen, muss die Größe zwischen {min} und {max}

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

ist

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

    
bertie 05.05.2012, 12:43
quelle

3 Antworten

4

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

    
Ralph 05.05.2012 17:49
quelle
0

Besser verwenden:

%Vor%

Ursache @Size erlaubt Whitespace characters wie space

    
yami 05.04.2016 12:42
quelle
0
  • für Size.foo.bar interpolation mit Namen funktioniert nicht
  • jedoch für 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:

%Vor%     
HeroicCoder 27.09.2017 14:46
quelle