2015-04-07 2 views
6

Ich habe mehrere Prozesse, in denen die Bean-Eigenschaften unterschiedliche Werte haben müssen. Beispiel:Java Bean-Validierung: Wie gebe ich mehrere Validierungsbeschränkungen desselben Typs, aber mit unterschiedlichen Gruppen an?

@Min(value=0, groups=ProcessA.class) 
@Min(value=20, groups=ProcessB.class) 
private int temperature; 

Leider hat die Bohne Validierung JSR 303 nicht @Repeatable auf javax.validation.constraints.Min so eingestellt, dass dieser Ansatz nicht funktioniert. Ich habe "Min.List" gefunden, aber ohne ein Dokument darüber, wie man es benutzt. Stattdessen werden die offiziellen Staaten Oracle doc bei http://docs.oracle.com/javaee/7/api/javax/validation/constraints/class-use/Min.List.html

Keine Verwendung von javax.validation.constraints.Min.List

im Moment So sieht es wie ein Spezifikationsfehler?!?

+0

Die Dokumentation sagt auch „mehrere Min Annotationen auf demselben Element definiert.“. Es sieht also genau so aus, wie du es machen willst. Hast du es versucht? Was ist die Schwierigkeit? –

+0

javac löst einen Kompilierungsfehler aus: Doppelte Annotation des nicht wiederholbaren Typs @ Min. Nur Annotationstypen, die mit @Repeatable gekennzeichnet sind, können mehrmals in einem Ziel verwendet werden. –

+0

Das ist, was es sagt, wenn Sie '@ Min' zweimal verwenden, wie in dem Code, den Sie gepostet haben. Deshalb sollten Sie stattdessen "@ Min.List" verwenden, was als "Definiert mehrere Min-Anmerkungen für dasselbe Element" dokumentiert ist. Was passiert, wenn Sie '@ Min.List' verwenden? –

Antwort

7

Die Syntax für Min.List, wie für jede andere Annotation ein Array von Annotationen als eines ihrer Attribute machen, ist

@Min.List({ @Min(value = 0, groups = ProcessA.class), 
      @Min(value = 20, groups = ProcessB.class) }) 
+0

Danke. Das ist es. Irgendeine Idee, warum das besser ist, als nur Min mehrmals zu haben? Zumindest verringert es die Lesbarkeit. –

+1

Anmerkungen sind seit Java 8 wiederholbar. Die Bean-Validierung wurde auf Java 5 oder 6 entworfen. Diese Möglichkeit gab es also nicht, daher die Umgehung von Min.List. Wenn Bean Validation jetzt entworfen wurde, würde Min.List wahrscheinlich nicht existieren. –

+0

Guter Punkt. Vielen Dank. Ich werde dies zu einer Erweiterungsanfrage für die Bean-Validierung machen. –

Verwandte Themen