Sådan behandles YAML med Jackson

1. Introduktion

I denne korte vejledning lærer vi, hvordan man bruger Jackson til at læse og skrive YAML-filer.

Når vi har gennemgået vores eksempelstruktur, bruger vi ObjectMapper at læse en YAML-fil i et Java-objekt og også skrive et objekt ud til en fil.

2. Afhængigheder

Lad os tilføje afhængigheden af ​​Jackson YAML-dataformat:

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

Vi kan altid finde den nyeste version af denne afhængighed af Maven Central.

Vores Java-objekt bruger en LocalDate, så lad os også tilføje en afhængighed af JSR-310 datatypen:

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

Igen kan vi slå den nyeste version op på Maven Central.

3. Data- og objektstruktur

Med vores afhængigheder kvadreret væk, vender vi os nu til vores inputfil og de Java-klasser, vi bruger.

Lad os først se på den fil, vi læser i:

ordrenr .: A001 dato: 2019-04-17 kunde Navn: kunde, Joe ordre Linjer: - vare: nr. 9 tandhjulsmængde: 12 enhed Pris: 1,23 - vare: widget (10 mm) antal: 4 enhed

Lad os derefter definere Bestille klasse:

public class Order {private String orderNo; privat LocalDate dato; privat streng kundenavn; private List orderLines; // Konstruktører, Getters, Setters og toString}

Endelig, lad os oprette vores OrderLine klasse:

offentlig klasse OrderLine {privat strengemne; privat int mængde; privat BigDecimal enhedPris; // Konstruktører, Getters, Setters og toString}

4. Læsning af YAML

Vi bruger Jacksons ObjectMapper at læse vores YAML-fil i en Bestille objekt, så lad os sætte det op nu:

mapper = ny ObjectMapper (ny YAMLFactory ());

Vi er nødt til at bruge findAndRegisterModules metode, så Jackson kan håndtere vores Dato korrekt:

mapper.findAndRegisterModules ();

Når vi har vores ObjectMapper konfigureret, vi bruger simpelthen readValue:

Ordreordre = mapper.readValue (ny fil ("src / main / resources / orderInput.yaml"), Order.class);

Vi finder det vores Bestille objektet udfyldes fra filen, inklusive listen over OrderLine.

5. Skrivning af YAML

Vi skal også bruge ObjectMapper at skrive en Bestille ud til en fil. Men lad os først tilføje nogle konfigurationer til det:

mapper.disable (SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

Tilføjelse af denne linje fortæller Jackson at skriv bare vores dato som en Snor i stedet for individuelle numeriske dele.

Som standard starter vores fil med tre bindestreger. Det er perfekt gyldigt for YAML-formatet, men vi kan slå den fra ved at deaktivere funktionen på den YAMLFabrik:

mapper = ny ObjectMapper (ny YAMLFactory (). deaktiver (Feature.WRITE_DOC_START_MARKER));

Med det ekstra opsætning ude af vejen, lad os oprette en Bestille:

Listelinjer = ny ArrayList (); lines.add (ny OrderLine ("Kobbertråd (200ft)", 1, ny 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), "Kunde, Jane", linjer);

Lad os skrive vores ordre ved hjælp af skrivVærdi:

mapper.writeValue (ny fil ("src / main / resources / orderOutput.yaml"), rækkefølge);

Når vi ser på orderOutput.yaml, det skal ligne:

ordrenr .: "B-9910" dato: "2019-04-18" kundenavn: "kunde, Jane" ordrelinjer: - vare: "kobbertråd (200ft)" antal: 1 enhedPris: 50,67 - vare: "skiver (1/4 \ ")" mængde: 24 enhedPris: 0,15

6. Konklusion

I denne hurtige vejledning lærte vi, hvordan man læser og skriver YAML til og fra filer ved hjælp af Jackson-biblioteket. Vi kiggede også på et par konfigurationselementer, der hjælper os med at få vores data til at se ud, som vi ønsker.

Den fulde eksempelkode er forbi på GitHub.