Bean Validation auf Collections

Die zum Java-EE-6-Umfang gehörende Spezifikation Bean Validation (JSR 303) stellt einen wesentlichen Schritt zur einheitlichen Validierung von Geschäftsdaten dar. Wie von einer ersten Version zu erwarten, gibt es allerdings noch Bereiche mit Verbesserungspotenzial.

Mit BV ist es leicht möglich, z. B. ein Feld, das eine Telefonnummer enthalten soll, mit einem entsprechenden Constraint zu belegen:

@ValidTelNumber
private String telefonNummer;

Dabei sei angenommen, dass ValidTelNumber eine passend definierte Annotation ist, bspw. auf Basis des Standard-Constraints Pattern mit Hilfe von Constraint Composition. Das Vorgehen dazu ist im entsprechenden Kapitel der Spezifikation recht gut beschrieben.

Was aber, wenn statt der einzelnen Telefonnummer eine Collection von Telefonnummern validiert werden soll? Dazu gibt es leider keine direkte Unterstützung durch den Standard. Für eine solche ‚transitive‘ Validierung ist prinzipiell das Constraint Valid vorgesehen, was aber voraussetzt, dass entsprechende Validierungsregeln für den Elementtyp der Collection definiert sind. Im Beispielszenario ist dieser Typ aber String, hat also keine Gültigkeitsregeln – erst recht nicht für den speziellen Anwendungsfall ‚Telefonnummer‘.

Derzeit bleibt nur die Möglichkeit, eine individuelle Validierungsmethode in Kombination mit dem Standard-Constraint AssertTrue einzusetzen:

private List telefonNummern = ...;

@AssertTrue(message = "{...}")
  protected boolean isTelefonNummernValid()
      {
          if (this.telefonNummern != null)
          for (String telNo : this.telefonNummern.getValues())
          if (!TelNumberValidator.isValid(telNo))
              return false;
          return true;
  }

Hier wäre eine Erweiterung der Spezifikation wünschenswert, z. B. mit Hilfe einer Parametrisierung von Valid:

@Valid(constraints={@ValidTelNumber}
private List telefonNummern = …;

Advertisements

Über Dirk Weil
Dirk Weil ist seit 1998 als Berater im Bereich Java tätig. Als Geschäftsführer der GEDOPLAN GmbH in Bielefeld ist er für die Konzeption und Realisierung von Informationssystemen auf Basis von Java EE verantwortlich. Seine langjährige Erfahrung in der Entwicklung anspruchsvoller Unternehmenslösungen machen ihn zu einem kompetenten Ansprechpartner und anerkannten Experten auf dem Gebiet Java EE. Er ist Autor in Fachmagazinen, hält Vorträge und leitet Seminare und Workshops aus einem eigenen Java-Curriculum.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: