0 Tage Serie
java / intermediate
Snippet

Domänenspezifische Wertobjekte mittels Records und Spring-Converter

Die Verwendung unveränderlicher Java-Record-Typen als starke Domänenprimitive verhindert 'Primitive Obsession'. Durch die Registrierung eines Spring-Converters werden HTTP-Parameter und Pfadvariablen automatisch in typsichere Domänenobjekte geparst.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public record IsoCurrencyCode(String code) {
public IsoCurrencyCode {
if (code == null || !code.matches("^[A-Z]{3}$")) {
throw new IllegalArgumentException("Invalid ISO currency: " + code);
}
}
}
@Component
public class StringToIsoCurrencyConverter implements Converter<String, IsoCurrencyCode> {
@Override
public IsoCurrencyCode convert(String source) {
return new IsoCurrencyCode(source.trim().toUpperCase());
}
}
spring
Erklärung
1
public record IsoCurrencyCode(String code) {
Deklariert einen unveränderlichen Wertobjekt-Datentyp mit einem einzigen Komponentenfeld.
2
if (code == null || !code.matches("^[A-Z]{3}$")) {
Erzwingt eine strikte Domänenvalidierung direkt im kompakten Konstruktor des Records.
3
public class StringToIsoCurrencyConverter implements Converter<String, IsoCurrencyCode> {
Integriert den benutzerdefinierten Datentyp in den ConversionService von Spring für nahtloses Binding.