© Excellent backgrounds/Shutterstock.com
Java Magazin
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 Referenzimplementierung 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.

Benjamin Schmeling


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.

BooleanNumberDateStringCollectionAny 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 Userobjekts letztendlich durchgeführt werden kann.

Der Testfall basiert auf dem Spring Framework [3]. Dies ist unter anderem an den Annotationen @ Run­With(Spring­JUnit4­ClassRunner.class) und @Con­text­Con­figu­ration zu erkennen. Letztere bindet eine Spring-Konfiguration ein (Listing 3). Hier wird mit der LocalValidatorFactoryBean eine Factory Bean instanziiert, die Validator Beans erzeugt. Eine Instanz dieser Validator Beans wurde in Listing 2 über @Autowired in den Testfall injiziert. Des Weiteren wird eine MethodValidationPostProcessor-Bean re...

Java Magazin
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 Referenzimplementierung 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.

Benjamin Schmeling


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.

BooleanNumberDateStringCollectionAny 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 Userobjekts letztendlich durchgeführt werden kann.

Der Testfall basiert auf dem Spring Framework [3]. Dies ist unter anderem an den Annotationen @ Run­With(Spring­JUnit4­ClassRunner.class) und @Con­text­Con­figu­ration zu erkennen. Letztere bindet eine Spring-Konfiguration ein (Listing 3). Hier wird mit der LocalValidatorFactoryBean eine Factory Bean instanziiert, die Validator Beans erzeugt. Eine Instanz dieser Validator Beans wurde in Listing 2 über @Autowired in den Testfall injiziert. Des Weiteren wird eine MethodValidationPostProcessor-Bean re...

Neugierig geworden?


   
Loading...

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