Java Expressions durch MapStruct Qualifier ersetzen

MapStruct ist eine beliebte Bibliothek um Daten zwischen unterschiedlichen Datentypen zu konvertieren. Für POJO Konvertierungen wird im einfachsten Fall jedes Attribut auf ein gleichnamiges Attribut in der Ziel-Instanz gemapped. In Sonderfällen muss auf die Annotation @Mapping zurückgegriffen werden um eine spezielle Konvertierung zu erzwingen. Häufig werden die nachteiligen Java Expressions genutzt. Die bessere Alternative ist der Einsatz von Qualifiern.

Deutsche Ortsnetzkennzahlen validieren

In diesem Beitrag geht es um eine weitere Ergänzung im kleinen Zoo der Validatoren der Telephone Bibliothek. Bislang existierten Validatoren für die Länderkennzahl und die deutschen Mobilvorwahlen, es fehlte die Validierung der deutschen Ortsnetzkennzahlen. Die Validierung der deutschen Ortsnetzkennzahlen fehlte bislang in der Bibliothek, weil es insgesamt 5200 von ihnen gibt. Dis bisher existierende Validierung für Mobilvorwahlen kümmerte sich nur um 54 Vorwahlen, die mit Hilfe einer einfachen Platzhaltersyntax auf 10 Vergleichswerte reduziert wurden.

IBAN Validierung aus der Schweiz

Die bank-account-validator Bibliothek validiert bislang BIC und IBAN Angaben auf syntaktische Korrektheit. Bei deutschen und österreichischen BIC und IBAN werden die Angaben zusätzlich gegen nationale Bankenlisten geprüft. Eine Liste Schweizer Banken ist von der SIX erhältlich. Basierend auf dieser Liste ist eine erweiterte Validierung von BIC und IBAN für der gesamten DACH Region möglich.

IBAN Validierung aus Österreich

Die bank-account-validator Bibliothek validiert bislang BIC und IBAN Angaben auf syntaktische Korrektheit. Bei deutschen BIC und IBAN werden die Angaben zusätzlich gegen eine Bankenliste der Deutschen Bundesbank geprüft. Damit wird zwar nicht die Existenz der Bankverbindung bewiesen, aber die Korrektheit der Bankangaben innerhalb des BIC und der IBAN.

Erfreulicherweise bietet die Österreichische Nationalbank eine Liste von Banken in Österreich an. Damit kann auch die Validierung von österreichischen Bankangaben verbessert werden. Bislang wird der EASYATW1 als valider österreichische BIC akzeptiert. Dies soll nun verhindert werden.

Von Buddies und Agenten – dynamische Codegenerierung in Java

Java Bibliotheken

Manchmal reichen die üblichen Möglichkeiten der Programmiersprache nicht aus und die exotischeren Ansätze müssen zum Einsatz kommen. Angefangen bei ClassLoader, Reflections, ServiceLoader, über AnnotationProcessor und JavaAgents bis hin zum Modifizieren des Bytecodes.

Sneaky Throws – Exceptions aus dem Hinterhalt

Die Einführung der Generics in Java 8 hat zur einigen eigentümlichen Konsequenzen geführt. Die meisten dieser Konsequenzen fußen auf dem Konzept der Type Erasure. Die Generics sind nur Bestandteil der Java Sprache und werden demzufolge nur vom Java Compiler beachtet. Der compilierte Code kennt, salopp gesprochen, keine generische Typen sondern operiert auf dem vermuteten Basistypen der Generics.

REST Attribute modifizieren in Spring Boot

Bei der Weiterentwicklung einer REST API kommt es hin und wieder zu veränderten Darstellungen der Attribute. Je nachdem wie der Versionierung der eigenen API gestaltet wurden, ergeben sich eine Reihe von Möglichkeiten mit geänderten Attributen umzugehen.

Trivial Pursuit – API MarkDown (2)

Fasst drei Jahre nach dem ersten Beitrag zum eigenen API MarktDown ergibt sich ein zweiter Beitrag zum Thema. Bei der Durchsicht der eigenen Projekte fiel auf, dass in dem Projekt rest-markdown-plugin noch immer FreeMarker als Template-Engine verwendet wurde. Die erste Ad-Hoc Umstellung der Template-Engine auf FreshMarker scheiterte jedoch kläglich.

Mehr Zeit mit FreshMarker (2)

Wer sich an die Aufzählung der unterstützen temporalen Datentypen erinnert, wird diverse neue Klassen wie Instant, ZonedDateTime oder OffsetDateTime vermissen. In diesem Beitrag werden zwei von ihnen in die Gruppe der unterstützen Datentypen aufgenommen. Bevor die Implementierung dieser Erweiterung vorgestellt wird, ein paar Worte zu den temporalen Java Standardklassen.

Mehr Zeit mit FreshMarker

Einer der Gründe für die Entwicklung der FreshMarker Bibliothek, war die fehlende Unterstützung der Java Time API in FreeMarker. Daher existierte schon in der ersten Implementierung neben der Unterstützung für java.util.Date, java.sql.Date und java.sql.Time auch eine Unterstützung für java.time.LocalDateTime, java.time.LocalDate und java.time.LocalTime. In diesem Beitrag wird die Formatierung für alle temporalen Typen verbessert. Bislang beherrschte FreshMarker nur die Standarddarstellung und eine Computer Audience Darstellung.