Wie man YAML mit Jackson verarbeitet

1. Einleitung

In diesem kurzen Tutorial lernen wir, wie man mit Jackson YAML-Dateien liest und schreibt.

Nachdem wir unsere Beispielstruktur durchgesehen haben, verwenden wir den ObjectMapper , um eine YAML-Datei in ein Java-Objekt einzulesen und ein Objekt in eine Datei zu schreiben.

2. Abhängigkeiten

Fügen wir die Abhängigkeit für das Jackson YAML-Datenformat hinzu:

 com.fasterxml.jackson.dataformat jackson-dataformat-yaml 2.11.1 

Wir können immer die neueste Version dieser Abhängigkeit von Maven Central finden.

Unser Java-Objekt verwendet ein LocalDate. Fügen wir daher auch eine Abhängigkeit für den JSR-310-Datentyp hinzu:

 com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.11.1 

Auch hier können wir die neueste Version von Maven Central nachschlagen.

3. Daten- und Objektstruktur

Nachdem unsere Abhängigkeiten ausgeglichen sind, wenden wir uns nun unserer Eingabedatei und den Java-Klassen zu, die wir verwenden werden.

Schauen wir uns zuerst die Datei an, in der wir lesen werden:

orderNo: A001 date: 2019-04-17 customerName: Customer, Joe orderLines: - item: No. 9 Sprockets quantity: 12 unitPrice: 1.23 - item: Widget (10mm) quantity: 4 unitPrice: 3.45

Definieren wir dann die Order- Klasse:

public class Order { private String orderNo; private LocalDate date; private String customerName; private List orderLines; // Constructors, Getters, Setters and toString }

Zum Schluss erstellen wir unsere OrderLine- Klasse:

public class OrderLine { private String item; private int quantity; private BigDecimal unitPrice; // Constructors, Getters, Setters and toString }

4. YAML lesen

Wir werden Jacksons ObjectMapper verwenden , um unsere YAML-Datei in ein Order- Objekt einzulesen. Richten wir das jetzt ein:

mapper = new ObjectMapper(new YAMLFactory());

Wir müssen die findAndRegisterModules- Methode verwenden, damit Jackson unser Datum richtig handhabt :

mapper.findAndRegisterModules();

Sobald wir unseren ObjectMapper konfiguriert haben, verwenden wir einfach readValue :

Order order = mapper.readValue(new File("src/main/resources/orderInput.yaml"), Order.class);

Wir werden feststellen, dass unser Order- Objekt aus der Datei gefüllt ist , einschließlich der Liste der OrderLine .

5. YAML schreiben

Wir werden auch ObjectMapper verwenden , um eine Bestellung in eine Datei zu schreiben . Aber zuerst fügen wir eine Konfiguration hinzu:

mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

Durch Hinzufügen dieser Zeile wird Jackson angewiesen, unser Datum nur als Zeichenfolge anstelle einzelner numerischer Teile zu schreiben .

Standardmäßig beginnt unsere Datei mit drei Strichen. Das gilt für das YAML-Format, aber wir können es deaktivieren, indem wir die Funktion in der YAMLFactory deaktivieren :

mapper = new ObjectMapper(new YAMLFactory().disable(Feature.WRITE_DOC_START_MARKER));

Lassen Sie uns mit dieser zusätzlichen Einrichtung einen Auftrag erstellen :

List lines = new ArrayList(); lines.add(new OrderLine("Copper Wire (200ft)", 1, new BigDecimal(50.67).setScale(2, RoundingMode.HALF_UP))); lines.add(new OrderLine("Washers (1/4\")", 24, new BigDecimal(.15).setScale(2, RoundingMode.HALF_UP))); Order order = new Order( "B-9910", LocalDate.parse("2019-04-18", DateTimeFormatter.ISO_DATE), "Customer, Jane", lines);

Schreiben wir unsere Bestellung mit writeValue :

mapper.writeValue(new File("src/main/resources/orderOutput.yaml"), order);

Wenn wir uns die orderOutput.yaml ansehen , sollte sie ähnlich aussehen wie:

orderNo: "B-9910" date: "2019-04-18" customerName: "Customer, Jane" orderLines: - item: "Copper Wire (200ft)" quantity: 1 unitPrice: 50.67 - item: "Washers (1/4\")" quantity: 24 unitPrice: 0.15

6. Fazit

In diesem kurzen Tutorial haben wir gelernt, wie man YAML mithilfe der Jackson-Bibliothek in und aus Dateien liest und schreibt. Wir haben uns auch einige Konfigurationselemente angesehen, mit denen wir unsere Daten so anzeigen können, wie wir es möchten.

Der vollständige Beispielcode ist auf GitHub beendet.