GEDOPLAN
Jakarta EE (Java EE)

JEE 11 – Records und Jakarta Validation

Jakarta EE (Java EE)
keyboard 4904427 1280 jpg

In diesem Blog-Beitrag möchte ich Euch weitere Neuerungen der Jakarta EE Version 11 vorstellen. Heute geht es dabei um die Möglichkeit auch Java Records mit der Jakarta Validation (ehemals Bean Validation) überprüfen zu können.

Records bieten eine gute Möglichkeit ohne viel Boilerplate-Code unveränderliche Daten zu speichern. Ein einfaches Beispiel könnte ein Person-Record sein.

public record Person(String name, LocalDate birthday) {}

Über den Konstruktor erzeuge ich mir das unveränderliche Objekt und kann auf die Attribute ohne die Erzeugung von Getter-Methoden ganz einfach zugreifen.

var person = new Person("Maxi", LocalDate.of(1990, 1, 1));
person.name();

Hibernate Validator

Der Hibernate Validator implementiert in der Version 8.0.1.Final die neue Jakarta Validation 3.1 Spezifikation. Diese ist auch bereits im aktuellen Wildlfy 33 enthalten und kann dort bereits genutzt werden. Um die Beispiele nicht zu sehr aufzublähen, habe ich statt der Verwendung eines Anwendungsservers den Validator in Unit-Tests eingesetzt.

Um die Jakarta Validation auch in Records nutzen zu können, müssen wir unseren Record einfach durch die entsprechenden Annotationen erweitern.

public record Person(
    @NotNull @Size(min = 2) String name,
    @PastOrPresent LocalDate birthday) {
}

Im ersten Beispiel erzeugen wir eine Person, dessen Name nur einen Buchstaben enthält. Damit sollte dann auch eine ConstraintViolation bei der Validierung erzeugt werden.

var person = new Person("J", LocalDate.now());
var result = validator.validate(person);
assertThat(result).isNotEmpty();

Die Validierung kann auch in Records auf einbettbare Objekte einbezogen werden. Wir erweitern hierfür unser Beispiel um eine eingebettete Adresse.

public class Address {
  @NotNull
  private String street;
  @NotNull
  private String city;
  @NotNull
  @Pattern(regexp = "\\d{5}")
  private String postcode;

  public Address(String street, String city, String postcode) {
    this.street = street;
    this.city = city;
    this.postcode = postcode;
  }
}

public record Person(
    @NotNull @Size(min = 2) String name,
    @PastOrPresent LocalDate birthday,
    @Valid Address address) {
}

Ich habe hier das einbettbare Objekt als klassische Java Klasse implementiert. An dieser Stelle hätte man natürlich ebenfalls ein Java-Record nutzen können. Das “hineinreichen” der Validierung erfolgt hierbei, wie üblich durch die @Valid-Annotation. Eine ungültige Adresse mit einer vierstelligen Postleitzahl würde entsprechend zu einer ConstraintViolation führen.

var person = new Person("Mini", LocalDate.now(), new Address("Downtown", "Somewhere", "1234"));
var result = validator.validate(person);
assertThat(result).isNotEmpty();

Fazit

Mit Verwendung der Jakarta Validation in Version 3.1 lassen sich nun endlich auch Records als uneränderliche Datenspeicher nutzen. Darüber hinaus können Records nun auch als einbettbare Objekte in Jakarta Persistence eingesetzt werden. Natürlich auch hier im Zusammenhang mit der Jakarta Validation.

Der Quellcode zum Beispiel steht wie immer auf Github unter https://github.com/GEDOPLAN/js-records-demo für euch zur Verfügung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

IT-Training - GEDOPLAN
Webprogrammierung

Angular 2 – Lazy Load Modules

Unsere bisherigen Beispiele sind alle davon ausgegangen das es ein zentrales Modul gibt dessen Referenzen von Webpack analysiert und in…

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!