© Excellent backgrounds/Shutterstock.com
Klassenweite und parameterübergreifende Constraints mit der Spring Expression Language

How to SpEL Validation


Die Validierung ist ein wichtiger Aspekt in der Anwendungsentwicklung, der sich durch alle Ebenen einer Schichtenarchitektur zieht. Mit JSR 349 Bean Validation [1] steht dem Entwickler eine ganze Reihe von standardisierten Annotationen zur Verfügung. Die Referenz­implementierung Hibernate Validator [2] erlaubt es, Constraints auf einer Klasse und deren Attributen oder mehreren Parametern einer Methode zu definieren. Die Implementierung ist aber recht aufwendig. Die Spring Expression Language kann hier Abhilfe schaffen.

Video: Modernes Java-Komponentendesign mit Spring 4.3

Das Validieren von Objekten oder Beans ist ein weitreichender Querschnittsaspekt in der Softwareentwicklung. Die Validierung sollte so früh wie möglich durchgeführt werden, um dem Benutzer direktes Feedback zu geben und das unnötige Ausführen von Anwendungslogik bei invaliden Daten zu verhindern. Trotzdem ist eine Validierung nicht nur im UI-Layer, sondern auch zu einem späteren Zeitpunkt sinnvoll, z. B. in der Serviceschicht oder in der Persistenzschicht. Die Gründe hierfür sind, dass sich nach Anwendung der Businesslogik der Zustand der Beans verändert haben könnte, bzw. die jeweilige Schicht aus unterschiedlichen Kontexten heraus konsumiert werden könnte, z. B. ein Aufruf über einen Web Service statt über die Benutzeroberfläche. Deswegen sollten Beans zu jedem Zeitpunkt validiert werden können. Dies sollte möglichst deklarativ durch die Beschreibung von Constraints auf den Eigenschaften eines Objekts erfolgen.

Um dieses Ziel zu erreichen, gibt es eine ganze Reihe von sowohl standardisierten als auch Hibernate-eigenen Java-Annotationen, die auf Attributen, Methoden oder Konstruktoren deklariert werden können. Tabelle 1 zeigt eine Übersicht der gängigsten Annotationen.

Boolean

Number

Date

String

Collection

Any Type

@AssertFalse

@DecimalMax

@Future

@Pattern

@Size

@Null

@AssertTrue

@DecimalMin

@Past

@Email

@NotEmpty

@NotNull

@Digits

@NotBlank

@Max

@CreditcardNumber

@Min

@Length

Tabelle 1: Auszug aus den vorhandenen Annotationen (fett: JSR 349, kursiv: Hibernate Validator)

Zur Veranschaulichung zeigt Listing 1 den Einsatz der Annotationen für die Klasse User mit den Standardannotationen @NotNull und der Hibernate-eigenen Annotation @Email, die festlegen, dass das jeweilige Attribut nicht null sein darf bzw. eine valide E-Mail-Adresse enthalten muss. In Listing 2 ist passend hierzu einen JUnit-Testfall dargestellt, um zu demonstrieren, wie die Validierung der Attribute eines Userob...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang