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);}}}@Componentpublic class StringToIsoCurrencyConverter implements Converter<String, IsoCurrencyCode> {@Overridepublic 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.